У меня странная проблема с PHP-методом DateTime diff. Я уже некоторое время использую методы DateTime и подумал, что у меня есть навык, но эта проблема меня поражает.
Я использую метод diff, чтобы определить количество месяцев / дней между двумя датами.
Сегодня я использовал следующий код:
$start = new DateTime('2012-03-01');
$end = new DateTime('2012-03-31');
$period = $start->diff($end);
var_dump($period);
Который дал следующий результат:
object(DateInterval)[3]
public 'y' => int 0
public 'm' => int 1 // Shouldn't this be 0?
public 'd' => int 1 // And where does this come from? Would expect 30.
public 'h' => int 0
public 'i' => int 0
public 's' => int 0
public 'invert' => int 0
public 'days' => int 30
Как сказано в моем комментарии выше, откуда, черт возьми, берется 1m1d (я бы ожидал 0m30d). Я не могу на всю жизнь понять, откуда он получает это значение. Я также попытался поместить метку полуночи 00:00:00
позади обеих дат, чтобы убедиться, что это не время, но это не имело никакого значения для вывода.
Кто-нибудь может объяснить мне этот результат?
Эта проблема возникает на моем сервере разработки Debian с PHP 5.3.3 с установкой Xdebug 2.1.1 и Suhosin 0.9.32.1.
Обновление
Воспроизведена эта проблема на моем рабочем сервере, который находится на CentOS 6.0 с «сырым» PHP 5.3.8 без каких-либо расширений / исправлений.
Обновление 2
Мне удалось найти «обходной путь» (работает только в данный момент времени). Если я изменю абсолютные даты на:
$start = new DateTime('first day of next month');
$end = new DateTime('last day of next month');
Это дает 0m30d в качестве выхода. Тем не менее, я озадачен вышесказанным, поэтому, если у кого-то есть подсказка об этом, пожалуйста, дайте мне знать!