Это мой код:
$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 и 05/05/2015 составляет 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;
Или попробуйте это:
$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;