てきとう

ワーワーゆうとります

PHPのDateTimeクラスの -1 monthに振り回されたでござるの巻

とても便利なDateTimeクラスちゃん
modifyで-1 weekとか-1 dayとか文章ぽく指定して日付を変更できるので大活躍なのですが

$day = new DateTime('2009-03-31');
$day->modify('-1 month');
echo $day->format('Y-m-d');

なんてやっても返ってくるのは2009-03-03です。
(3、5、7、10、12月はこんな感じで返ってくる値は当月になります)
[参考] http://itpro.nikkeibp.co.jp/article/COLUMN/20070131/260224/

というわけで一回1日に戻してからmodifyしないとダメみたいです。

$end = new DateTime('2009-03-31');
$start = new DateTime($end->format('Y-m-01'));
$start->modify('-1month');

終了日と開始日(終了日の1か月前の1日)を出したかったので、こんな感じにしました。