Web Tech Log by 1KB

Icon

Web開発、Webデザイン、SEO、携帯コンテンツなどWebにまつわるテクノロジーを追っかけるブログ。旧名「Web屋に復帰した人間のリハビリ日記」

PHP strtotime関数でハマった!(翌月の表現の処理)

PHPには strtotimeという関数があります。引数に例えば「+1 month」と指定すれば1ヶ月後のタイムスタンプを返してくれます。

<?php $nextmanth = date("Y-m", strtotime("+1 month"));?>

で翌月を返してくれると思ってました。しかし甘かった!!
例えば今月28日の時点では問題なかったのですが、

例:2009年1月28日の時点
<?php
$nextmonth = date("Y-m", strtotime("+1 month"));
echo $nextmonth;?>
結果:2009-02

これが31日では

例:2009年1月31日の時点
<?php
$nextmonth = date("Y-m", strtotime("+1 month"));
echo $nextmonth;
?>
結果:2009-03

となってしまう。
なぜならば、strtotime関数では1月31日の1ヶ月後は2月31日で2月は31日が存在しないので3月3日という認識らしい。

実際に以下のコードを実行すると

例:2009年1月31日の時点
<?php
$nextmonth = date("Y-m-d", strtotime("+1 month"));
echo $nextmonth;?>
結果:2009-03-03

となってしまう。
1月31日では「次の月」を3月と返してしまってくれていて、原因を突き止めるのに苦労しました。

正解は

例:2009年1月31日の時点
<?php
$nextmonth = date("Y-m", strtotime(date("Y-m-01") . "+1 month"));
echo $nextmonth;
?>
結果:2009-02

いったん「2009-01-01」と月初に戻してから、「+1 month」してやるとうまくいきました。

Category: php

Tagged:

One Response

  1. [...] PHP strtotime関数でハマった!(翌月の表現の処理) [...]

Leave a Reply

킹ēǂ݂uOp[c