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-дневного радиуса одного месяца
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
Правильным способом для вас сделать это было бы:-
$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;