Ответ 1
Вы можете использовать DateInterval::format
.
return $interval->format("%r%a");
Передача в int при необходимости:
return (int)$interval->format("%r%a");
$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");
Если дата в прошлом, инвертирование будет 1.
Если Date в будущем, то инвертирование будет 0.
$инвертировать = $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, 'Y-m-d') - strtotime($date2, 'Y-m-d');
?>
$diff вернет отрицательный или положительный результат.