strtotime関数を使用すると、「3日後」や「1週間後」などの日付計算が簡単にできます。
ですが、月単位での日付計算で「month(s)」を使用すると、少し予想外の結果になる場合があります。
[php]
$timestamp = strtotime(‘2011-03-30 -1 month’);
echo date(‘Y-m-d’, $timestamp); // 2011-03-02
$timestamp = strtotime(‘2011-05-31 +1 month’);
echo date(‘Y-m-d’, $timestamp); // 2011-07-01
[/php]
上記のような結果になるのは、「month(s)」での加減算が、単純に「月」の値を増減させた後、
「日」の余剰分を翌月に繰り越しているためです。(2011-02-30 → 2011-03-02)
この挙動が間違っているとは言い切れませんが、少なくとも期待される結果とは言い難いと思います。
そのため、数ヶ月前 or 数ヶ月後の計算を行う際、基準となる日付が月末付近(29,30,31日)になる
可能性が少しでも考えられる場合は、「month(s)」は使用せず、別の手段を用いるべきです。
例えば、2011-05-31の1ヶ月後を2011-06-30と扱いたい場合は、
mktime関数やcal_days_in_month関数などを組み合わせて月末日を計算する形になります。
また、「1ヶ月=30日間」で換算しても支障がないような場合は、
「+1 month」を「+30 days」と置き換えれば問題はなくなります。