$today = new DateTime(); $date = new DateTime('2013-03-10'); $interval = $date->diff($today); return $interval->days; // returns 4 $today = new DateTime(); $date = new DateTime('2013-03-10'); $interval = $today->diff($date); // arguments swapped around here return $interval->days; // returns 4
Почему обе эти функции возвращают положительные 4? Как вернуть отрицательное число, если $ date в прошлом?
Вы можете использовать DateInterval::format
.
return $interval->format("%r%a");
При необходимости добавьте в int:
return (int)$interval->format("%r%a");
Если Date находится в прошлом, инвертирование будет 1.
Если Date в будущем, то инвертирование будет 0.
$ invert = $ interval-> инвертировать;
Вот ваш ответ:
$today = new DateTime(); $date = new DateTime('2013-03-10'); $interval = $today->diff($date); echo $interval->format("%r%a");
Проверьте его здесь
Когда вы различаете два объекта DateTime, применяется следующее правило:
$objA->diff($objB) == $objB - $objA
В качестве примера:
$todayDateObj = new \DateTime('2016/5/26'); $foundedDateObj = new \DateTime('1773/7/4'); $interval = $todayDateObj->diff($foundedDateObj); echo $interval->format('%r%a') . "\n\n"; // -88714 $interval2 = $foundedDateObj->diff($todayDateObj); echo $interval2->format('%r%a'); // 88714
вы можете использовать такую метку времени.
<?php $date1 = '2015-01-02'; $date2 = '2015-01-05'; $diff = strtotime($date1, 'Ym-d') - strtotime($date2, 'Ym-d'); ?>
$ diff вернет отрицательный или положительный результат.