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 говорит 0. diff->d говорит 30 дней вместо

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

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


РЕДАКТИРОВАТЬ:

Поскольку мне нужно только подсчитать, сколько месяцев проходит между двумя установленными датами, и пользователь вставляет от а также в даты с месяцем и годом (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 за то, что кормили меня ответом! 😉

2

Решение

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-> m этих двух дат также вернет «1», как указано в документации.

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

0

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

На моем компьютере код дает разные результаты. Моя версия 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

?>

РЕДАКТИРОВАТЬ 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

?>
-1

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