Класс DateTime и последний месяц
У меня есть странное поведение с классом DateTime.
Сегодня 2012-05-31. Часовой пояс - "Европа/Вильнюс".
Следующий код
$date = new DateTime('last month');
echo $date->format('Y-m-d');
выводит 2012-05-01
. Это ошибка php? Кстати, $date = new DateTime('-1 month');
выводит то же самое.
Ответы
Ответ 1
Это кажется особым случаем в течение месяцев с 31 днем:
Обратите внимание, что "-1 месяц" может привести к неожиданному результату при использовании в последний день месяца, который имеет 31 день (из http://www.php.net/manual/de/datetime.formats.relative.php#102947)
Что вы можете сделать:
$date = new DateTime('last day of last month'); // this is "2012-04-30" now
/// 'first day of last month' would work either, of course
И тогда это зависит от того, что вы собираетесь делать с датой.
Ответ 2
Думаю, вам нужно иметь существующее время и изменить его, например:
<?php
$d = new DateTime( date("Y-m-d") );
$d->modify( 'last day of previous month' );
echo $d->format( 'Y-m-d' ), "\n";
?>