Почему datetime-> days всегда возвращает положительное число

$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 вернет отрицательный или положительный результат.