アーカイブ

2012 年 12 月 のアーカイブ

strtotimeの「-1 month」は1ヶ月前ではない

2012 年 12 月 11 日 コメントはありません

以下に期待するのは「2012年02月」

echo date('Y年m月', strtotime('-1 month', strtotime('2012-03-31')));

答えは「2012年03月」

実際に「-1 month」がどのくらいの値を返してるを以下で調べてみた。


for ($i = 1; $i <= 12; $i++) { $date = sprintf('2012-%02d-01', $i); $day = strtotime($date) - strtotime('-1 month', strtotime($date)); printf("%s %d\n", $date, $day / 86400); } [/php] 対象日、それに対する「-1 month」での日数の順に表示した結果は以下の通り [bash] 2012-01-01 31 2012-02-01 31 2012-03-01 29 2012-04-01 31 2012-05-01 30 2012-06-01 31 2012-07-01 30 2012-08-01 31 2012-09-01 31 2012-10-01 30 2012-11-01 31 2012-12-01 30 [/bash] この結果から、「-1 month」は対象日の先月分の日数をマイナスする処理ということがわかる。 strtotimeで「-1 month」を用いて1ヶ月前の月を取得したい場合、対象日を月の初め、1日をする必要がある。

カテゴリー: php タグ: