У меня есть две временные метки, созданные против дат 02/09/2014 23:30 и 03.09.2014 12:00.
Разница между этими временными отметками составляет всего 30 минут, но поскольку дата изменилась с O2 октября на 03 октября, ее следует рассчитывать как день.
Мой код
$current_time_zone = isset($_COOKIE['IANA_timezone_key']) ? $_COOKIE['IANA_timezone_key'] : "";
$d1 = new DateTime(date('Y-m-d'), timezone_open($current_time_zone));
$d2 = new DateTime(date('Y-m-d'), timezone_open($current_time_zone));
$d1->setTimestamp($row["transitions_date"]); // $row["transitions_date"] has timestamp value
$d2->setTimestamp($curr_transition_in_date); // $curr_transition_in_date has timestamp value
$diff = date_diff($d1, $d2);
$day_difference = $diff->days;
Любая помощь будет высоко оценена.
Вы не могли ожидать желаемой разницы в день от возвращающегося объекта date_diff () поскольку это основано на фактической разнице во времени. Самый простой способ — это настроить его самостоятельно.
$d1 = new DateTime(date('Y-m-d'));
$d2 = new DateTime(date('Y-m-d'));
$d1->setTimestamp($row["transitions_date"]);
$d2->setTimestamp($curr_transition_in_date);
$diff = date_diff($d1, $d2);
$day_difference = $diff->days;
echo 'Actual output from date_diff: '.$day_difference;
echo '<br>';
if($d2->format('H:i:s') < $d1->format('H:i:s')){
$day_difference++;
}
echo 'Corrected output: '.$day_difference;
Демо 1 на другой день, но тот же месяц и год.
Демо 2 на один и тот же день, но разные месяц и год.
Демо 3 для того же выхода.
Других решений пока нет …