Php 两个日期的比较

Php 两个日期的比较,php,Php,我已经完成了此功能,因此我没有计算两个日期之间的周末,因此在数据库中,我将日期字段作为DATATIME,但在执行时,我得到以下错误: 遇到格式不正确的数值 功能如下: function diashabiles ($fecha_inicio, $fecha_fin) { list ($year, $month, $day) = explode ("/", $fecha_inicio); $ini = mktime (0, 0, 0, $month, $day, $year);

我已经完成了此功能,因此我没有计算两个日期之间的周末,因此在数据库中,我将日期字段作为DATATIME,但在执行时,我得到以下错误:

遇到格式不正确的数值

功能如下:

function diashabiles ($fecha_inicio, $fecha_fin) {

    list ($year, $month, $day) = explode ("/", $fecha_inicio);
    $ini = mktime (0, 0, 0, $month, $day, $year);
    list ($yearf, $mesf, $diaf) = explode ("/", $fecha_fin);
    $fin = mktime (0, 0, 0, $mesf, $diaf, $yearf);
    $newArray = array ();
    $r = 1; $i = 0; $dia2 = 0;

    while ($ini! = $fin) {
    $ini = mktime (0, 0, 0, $month, $day + $r, $year);
    $newArray [$i] = $ini;
    $r++; $i++;
    }


    for ($i = 0; $i <count($newArray); $i++) {
    $day = $newArray [$i];
    $date = getdate($day);
    if ($date["wday"] == 0 or $date["wday"] == 6) {
    $dia2++;
    }
    }

    $rlt = count($newArray) - $dia2;
    return $rlt;

}
function diashabiles($fecha\u inicio,$fecha\u fin){
列表($year,$month,$day)=爆炸(“/”,$fecha_inicio);
$ini=mktime(0,0,0,$month,$day,$year);
列表($yearf、$mesf、$diaf)=爆炸(“/”,$fecha_fin);
$fin=mktime(0,0,0,$mesf,$diaf,$yearf);
$newArray=array();
$r=1;$i=0;$dia2=0;
而($ini!=$fin){
$ini=mktime(0,0,0,$month,$day+r,$year);
$newArray[$i]=$ini;
$r++;$i++;
}

对于($i=0;$i而言,问题在于此代码:

list ($year, $month, $day) = explode ("/", $fecha_inicio);
$ini = mktime (0, 0, 0, $month, $day, $year);
list ($yearf, $mesf, $diaf) = explode ("/", $fecha_fin);
$fin = mktime (0, 0, 0, $mesf, $diaf, $yearf);
您声明,最初存储的数据是日期格式的,这意味着从数据库中出来的数据只是一年、一个月和一天。然后,您将数据类型更改为DATETIME,这显然会更改数据库中存储的数据,也显然会更改检索到的数据

简而言之,explode函数将为您提供以下内容:

$year=
数据库中的任何年份。可以是数字。
$month=
数据库中的任何月份。可以是数字。
$day=
其余部分,包括日、时、分、秒。绝对不是数字


使用上述信息时(日期是字符串而不是数字),则
mktime()
失败。

如果替换

而($ini!=$fin)

用这个


当($ini代码中的每个
$
之后是否真的有空格?没有。这是编辑器所做的,现在我正在修改它。您得到的实际错误消息是什么?我猜有行号,或者其他一些细节?代码是正确的,您能帮我吗?我关于错误的问题是确定错误发生的位置,因为这可能与数据有关(我不知道)。那么$day我必须声明它是完整的还是完整的?我不明白的是,从数据库出来的内容可能是这样的:
2018/01/27 13:05:21
。现在,当你
explode()
使用
/
分隔符,您会得到:
2018
01
27 13:05:21
。我猜了一部分,但这是可能的情况。因此,您需要从最后一个值中提取
27
。可能
explode()
再次使用分隔符作为空格字符:“?您的更改确实会阻止无限循环,但OP甚至没有达到代码的这一部分。diashabiles('2018/02/16','2018/02/19');输出为2天。分享您的日期。