2015-11-27 3 views
3

У меня есть проблемы с моим «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)"; 

Когда я себе $ результата, PHP показать мне 0. Но между этими двумя датами есть больше дней, чем 0 дня ...

php не вычисляет разницу между двумя датами, которые не совпадают с этим годом?

+0

Нет Probs, я сместился комментарий в ответ с ответом на этот вопрос просто, D –

ответ

3

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

То, что вы можете использовать вместо этого является days свойство на DateInterval, как таковой:

$result = $interval->days;

+0

Спасибо Jon , но как сделать, чтобы вернуть количество дней между этими датами? – Syxmoke

+0

@Syxmoke Используя код в нижней части ответа. –

+0

О, извините, я не видел вашего ответа, сейчас проверю. – Syxmoke

1

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

На самом деле, DateInterval::format() делает имеет смысл, если у вас есть определенное количество времени (в годы, месяцы, дни, часы), например:

$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); 
Смежные вопросы