strtotime()で月を処理する場合の注意点
starftime で「-1または+1 month」などの足し引きを行う際、期待しない結果が出て来る可能性があります。
足し引きした結果の月の日数が30日以下、いわゆる西向く士(2,4,6,9,11)月の場合に発生します。
[失敗例]
< ?php
$timestamp = strtotime('2010-03-31 -1 month');
echo date('m', $timestamp).'月';
?>
結果:03月
[成功例]
< ?php
$timestamp = strtotime(' -1 month', date('Y-m-01', strtotime('2010-03-31')));
echo date('m', $timestamp) . '月';
?>
結果:02月
↓のように処理をしていると考えれば分かりやすい。
‘2006-03-31’ -1 month = ‘2006-02-31’
‘2006-02-31’ = ‘2006-03-03’
上記成功例では’Y-m-01’と1日を指定していますが、1日~28日であればなんでもよい。