Я пытаюсь использовать date_diff()
:
$datetime1 = date_create('19.03.2010'); $datetime2 = date_create('22.04.2010'); $interval = date_diff($datetime1, $datetime2); echo $interval->format('%R%d days');
Его не работает для меня, дает ошибку:
Call to undefined function date_diff()
Как я могу заставить его работать?
Используется PHP 5.2.
Благодарю.
Для функции date_diff требуется версия PHP версии 5.3 или выше.
ОБНОВИТЬ
Пример для PHP 5.2 (взято из комментариев пользователя date_diff).
<?php function date_diff($date1, $date2) { $current = $date1; $datetime2 = date_create($date2); $count = 0; while(date_create($current) < $datetime2){ $current = gmdate("Ymd", strtotime("+1 day", strtotime($current))); $count++; } return $count; } echo (date_diff('2010-3-9', '2011-4-10')." days <br \>"); ?>
Вот версия, которая не использует объекты Date, но это не имеет никакого значения в 5.2.
function date_diff($d1, $d2){ $d1 = (is_string($d1) ? strtotime($d1) : $d1); $d2 = (is_string($d2) ? strtotime($d2) : $d2); $diff_secs = abs($d1 - $d2); return floor($diff_secs / (3600 * 24)); }
function date_diff($date1, $date2) { $count = 0; //Ex 2012-10-01 and 2012-10-20 if(strtotime($date1) < strtotime($date2)) { $current = $date1; while(strtotime($current) < strtotime($date2)){ $current = date("Ymd",strtotime("+1 day", strtotime($current))); $count++; } } //Ex 2012-10-20 and 2012-10-01 else if(strtotime($date2) < strtotime($date1)) { $current = $date2; while(strtotime($current) < strtotime($date1)){ $current = date("Ymd",strtotime("+1 day", strtotime($current))); $count++; } $current = $current * -1; } return $count; }
Сначала преобразуйте обе даты в формат mm / dd / yyyy, затем выполните следующие действия:
$DateDiff = floor( strtotime($datetime2 ) - strtotime( $datetime1 ) ) / 86400 ; //this will yield the resultant difference in days
Преобразование даты DateTime в тип даты Unix и вычитание одного из другого: Формат -> («U») – это место, где преобразуется DateTime.
$datetime1 = date_create('19.03.2010'); $datetime2 = date_create('22.04.2010'); $intervalInDays = ($datetime2->format("U") - $datetime1->format("U"))/(3600 * 24);
Не уверен, что это безопасный Y2K38, но это один из простейших методов обхода date_diff.