php дата->diff() возвращает бессмысленные суммы


Это мой код:

$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+ в результате

Например, в соответствии с этим кодом разница в днях между 26/04/2015 и 02/05/2015 составляет 16557 дней, я не знаю, как они добираются до этого числа, но это около 45 лет, и результат всегда 16000 +, независимо от того, какие даты я выбираю, учитывая, что они находятся за пределами 12-дневного радиуса одного месяца

Author: Jeremy C., 2015-05-19

3 answers

Когда вы делаете - 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
 2
Author: Sougata Bose, 2015-05-19 10:32:30

Правильным способом для вас сделать это было бы:-

$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

 0
Author: vascowhite, 2015-05-21 08:50:22

Или попробуйте:

$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; 
 0
Author: Elton da Costa, 2015-06-07 16:53:51