2015-01-26 2 views
2

Я хочу, чтобы подсчитать, сколько месяцев существует между двумя датами:DateInterval возвращает 0 месяцев?

$from = new DateTime('2014-11-01 00:00:00'); 
$to = new DateTime('2014-12-01 00:00:00'); 
$diff = $from->diff($to); 
echo $diff->m; // <-- 0 

Разница между 2014-11-01 00:00:00 и 2014-12-01 00:00:00 должно быть ровно один месяц, не так ли? Но $diff->m говорит . diff->d говорит вместо этого 30 дней.

Если бы я попробовать то же самое с 2014-01-01 00:00:00 и 2014-02-01 00:00:00, $diff->m говорит месяц сейчас, что является правильным.

Я что-то пропустил?


EDIT:

Как мне нужно только подсчитать, сколько месяцев есть между двумя заданными датами и пользователем вставляет из и до даты с месяцем и годом (12/2014), лучшее решение работает для меня просто растет к дате по:

// user inserts 
// from: 11/2014 
// to: 12/2014 

$from = new DateTime('2014-11-01'); 
$to = new DateTime('2014-12-15'); 
$diff = $from->diff($to); 

echo $diff->m // outputs 1 

Спасибо STLMikey за то, что ты дал мне ответ! ;)

ответ

0

DateInterval работает немного ... странно во многих сценариях.

Попробуйте $diff->format('%m month, %d days'); и посмотрите, поможет ли это некоторым образом. %m и %d часто возвращают 0, если разница лучше покрыта другой мерой.

, например:

$from = new \DateTime('2014-01-01 00:00:00'); $to = new \DateTime('2014-02-15 00:00:00');

$ diff-> м из этих двух дат также возвращает "1", в соответствии с документацией.

Лично я просто использую $interval->format('%a total days');, так как он не смущает себя (или меня), пытаясь быть слишком умным.

+0

'$ diff-> формат ('% м месяц,% D дней');' возвращает _ "0 месяц, 30 дней" _ в первом пример. Разница составляет 30 дней, но это должно отображаться как 1 месяц, 0 дней? –

+1

$ from = new \ DateTime ('2014-01-01 00:00:00'); $ to = new \ DateTime ('2014-02-15 00:00:00'); разница в месяцах также «1» в этом случае тоже ... месяцы не рассчитаны как 30 дней. % d просто дает вам разницу значений месяца – STLMikey

-1

На моем компьютере код дает разные результаты. Моя версия php - 5.3.13.

<?php 

$from = new DateTime('2014-11-01 00:00:00'); 
$to = new DateTime('2014-12-01 00:00:00'); 
$diff = $from->diff($to); 
echo $diff->m; // outputs 1 
echo $diff->d; // outputs 0 

?> 

EDIT 1: другой выход

<?php 

$from = new DateTime('2014-01-01 00:00:00'); 
$to = new DateTime('2014-02-01 00:00:00'); 
$diff = $from->diff($to); 
echo $diff->m; // outputs 1 
echo $diff->d; // outputs 0 

?> 
+0

Просто FYI: вы можете прочитать это, если хотите: http://meta.stackexchange.com/a/214174 И короткая цитата оттуда: «Могу ли я поместить свой комментарий в ответ? No.' – Rizier123

+0

Извините, если я могу помочь внести вклад в то, что человек выяснит проблему, не будет ли несправедливостью не делать этого? Должен ли я удалить это? –

+0

Нет, я бы просто начал свой ответ по-другому. – Rizier123

Смежные вопросы