Класс 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";
?>