Почему разница между двумя объектами DateTime не работает?

У меня проблема с моим «кодом разницы 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 не рассчитывает разницу между двумя датами, которые не в том же году?

3

Решение

Потому что есть разница в 0 дней. Однако есть разница в 1 год. Если вы изменили %d в %y вы получите 1. Таким образом, есть разница в 1 год, 0 месяцев и 0 дней.

Вместо этого вы можете использовать days собственность на DateInterval, в качестве таких:

$result = $interval->days;

3

Другие решения

Хорошо, я знаю, что ответ уже был дан. Но ниже приведено лишь небольшое объяснение.

По факту, 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);
1

По вопросам рекламы [email protected]