У меня проблема с моим «кодом разницы DateTime»:
$timeStart = new DateTime('2015-11-28');
$timeEnd = new DateTime('2016-11-28');
$interval = $timeEnd->diff($timeStart);
$result = $interval->format('%d');
echo $result." day(s)";
Когда я визуализирую $ result, PHP показывает мне 0. Но между этими двумя датами больше дней, чем 0 дней …
PHP не рассчитывает разницу между двумя датами, которые не в том же году?
Потому что есть разница в 0 дней. Однако есть разница в 1 год. Если вы изменили %d
в %y
вы получите 1. Таким образом, есть разница в 1 год, 0 месяцев и 0 дней.
Вместо этого вы можете использовать days
собственность на DateInterval
, в качестве таких:
$result = $interval->days;
Хорошо, я знаю, что ответ уже был дан. Но ниже приведено лишь небольшое объяснение.
По факту, DateInterval :: формат () имеет смысл, когда у вас есть фиксированное количество времени (в годах, месяцах, днях, часах), например:
$interval = new DateInterval('P2Y4DT6H8M');
echo $interval->format('%d days');
Это не ваш случай!
где у вас есть относительное время (2016-11-28 относится к 2015-11-28) вообще. В этом конкретном случае вы хотите, чтобы количество дней прошло с 28-11-2015.
Вот почему DateInterval::days
(DateTime :: diff () возвращает DateInterval объект) имеет смысл:
$start = new DateTime('2015-11-28');
$end = new DateTime('2016-12-28');
var_dump($end->diff($start)->days);