DateTimeクラスで奇妙な動作をします。
今日は2012-05-31です。タイムゾーンは「ヨーロッパ/ビリニュス」です。
次のコード
$date = new DateTime('last month');
echo $date->format('Y-m-d');
出力2012-05-01
。これはPHPのバグですか?ちなみに、$date = new DateTime('-1 month');
同じものを出力します。
これは、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
そして、それはあなたが日付で何をしようとしているのかに依存します。
次のように、すでに存在する日時を設定して変更する必要があると思います。
<?php
$d = new DateTime( date("Y-m-d") );
$d->modify( 'last day of previous month' );
echo $d->format( 'Y-m-d' ), "\n";
?>