Подтвердить что ты не робот

Почему 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 в прошлом?

4b9b3361

Ответ 1

Вы можете использовать DateInterval::format.

return $interval->format("%r%a");

Передача в int при необходимости:

return (int)$interval->format("%r%a");

Ответ 2

Если дата в прошлом, инвертирование будет 1.
Если Date в будущем, то инвертирование будет 0.

$инвертировать = $interval- > инвертировать;

Ответ 4

Если вы различаете два объекта 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

Ответ 5

вы можете использовать такую ​​метку времени.

<?php 
    $date1 = '2015-01-02';
    $date2 = '2015-01-05';
    $diff = strtotime($date1, 'Y-m-d') - strtotime($date2, 'Y-m-d'); 
?>

$diff вернет отрицательный или положительный результат.