php date->diff() 返回无意义的金额

php date->diff() returning nonsensical amounts

这是我的代码:

$logdate = Input::get('logdate');
            $enddate = Input::get('enddate');
            //Cast the dates to yyyy-dd-mm format for comparison
            $startdt  = date('Y-d-m',strtotime($logdate));
            $enddt = date('Y-d-m',strtotime($enddate));
            //Cast the dates into datetime objects
            $date1 = new DateTime($startdt);
            $date2 = new DateTime($enddt);
            //Calculate the difference between the 2 datetime objects
            $diff = $date1->diff($date2, true);
            //cast logdate into correct format for entry in the database
            $newlogdate = strtotime($logdate);
            $formatlogdate = date('Y-d-m',$newlogdate);

我正在使用它来获取间隔中的天数:

 Log::info(intval($diff->days));

只要我编写的代码在同一个月内涉及 12 天或更少的差异,但只要超过 12 天,或者一旦我尝试计算 2 个月之间的差异,它就会失控,并且结果给了我 16000+

例如,根据此代码,2015 年 4 月 26 日和 2015 年 5 月 2 日之间的天数差异为 16557 天,我不知道他们是如何得出这个数字的,但大约是 45 年,而且结果总是 16000 + 无论我选择哪个日期,因为它们在 12 天的单月半径之外

当你做 - date('Y-d-m',strtotime($logdate)); 它返回 - 1970-01-01 两个日期。 / 正在制造问题。 试试这个 -

$log = '26/04/2015';
$end = '02/05/2015';

$date1 = new DateTime(str_replace('/', '-', $log));
$date2 = new DateTime(str_replace('/', '-', $end));
$diff = $date1->diff($date2, true);
echo $diff->days;

输出

6

您执行此操作的正确方法是:-

$log = '26/04/2015';
$end = '02/05/2015';

$date1 = \DateTime::createFromFormat('d/m/Y', $log);
$date2 = \DateTime::createFromFormat('d/m/Y', $end);
$diff = $date1->diff($date2, true);
echo $diff->days;

http://3v4l.org/EhGaA

或尝试一下:

$datetime1 = strtotime("2011-10-10 10:00:00");
$datetime2 = strtotime("2011-10-10 10:45:00");
$interval  = abs($datetime2 - $datetime1);
$minutes   = round($interval / 60);
echo 'Diff. in minutes is: '.$minutes;