PHPのstrtotime関数で +1 month するときの注意

PHPのstrtotime関数で来月、再来月のmonthを取得してたらハマったのでメモ。実際ハマったのは+2 monthの時だけど、月によっては+1 monthでハマれると思う。

今日(2012/07/31)の時点で以下のコードを実行すると '2012-10' と表示されます。本当は '2012-09' であって欲しかった・・・。

<?php
// 今日から2ヶ月後のtimestampが欲しいよー
$timestamp = strtotime('+2 month', date());
$yyyymm = date('Y-m', $timestamp);
var_dump($yyyymm);

解決策は以下。 '2012-07-01+2 month' になるようにすればいいらしい。

<?php
$timestamp = strtotime(date('Y-m-01').'+2 month');
$yyyymm = date('Y-m', $timestamp);
var_dump($yyyymm);

あ、dayまで求めたい時は '2012-10-01' になるのが正解なのか。