Я хочу подсчитать, сколько месяцев проходит между двумя датами:
$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 за то, что кормили меня ответом! 😉
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');
поскольку это не смущает себя (или меня), пытающегося быть слишком умным.
На моем компьютере код дает разные результаты. Моя версия 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
?>