两个日期之间的比较

时间:2018-02-19 07:22:11

标签: php

我已经完成了这个功能,因此我的工作日没有计算两个日期之间的周末,在数据库中我将​​日期字段作为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;

}

谢谢!!

2 个答案:

答案 0 :(得分:1)

问题在于此代码:

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);

您说最初存储的数据是DATE格式,这意味着数据库中出现的数据只是一年,一月和一天。然后,您将数据类型更改为DATETIME,这显然会更改数据库中存储的内容,并显然会更改检索的内容。

简而言之,您的爆炸功能将为您留下以下内容:

$year =无论哪一年都在数据库中。可以是数字。 $month =数据库中的任何月份。可以是数字。 $day =其余的,包括日,小时,分钟,秒。绝对不是数字。

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

答案 1 :(得分:0)

如果替换

,脚本效果很好

while($ ini!= $ fin)

使用此

while($ ini&lt; = $ fin)。

但我仍然建议您查看此链接Use DateTime, DateInterval and DatePeriod