strtotimeの+monthについて

まっちー

まっちー

どうもこんにちは。マッチーです。

GW? 何それ? 日本にはそんな連休があったんでしたっけ?

大型連休を取っている人は、今度の土日まで連休が続く人もいますよね。まったくうらやましい話です。

僕はGWは一日も休みがありませんでした。今度の土日もおそらく仕事してます。まあ、30年近く生きていればそんな年もあるさ。

さて、phpを使ってカレンダーなんかを作っていて、来月の月を表示させたい、そんなときはdate関数を以下のように使えば楽勝。

echo date('m月', strtotime('+1 month'));

……と、思っていたのだけれど、案外そうでもなかった。

基本的には大丈夫なんだけど、例えば今日が3月31日の場合、上記の書き方だと、内部的には4月31日を出力しているらしい。でも4月には31日がないので、実際の出力は5月1日になる。だからechoされるのは5月になる。他の31日がない月も同様なので、つまり西を向いているお侍さんはさすがに武士だけあって、+1 monthなんていうハイカラな横文字を素直に受け入れる気はないらしいですね。

いや、ある意味素直に受け入れてるからこその出力結果とも言えるんだけど……まあそれはどうでもいいや。

$timestamp = strtotime(date('Y-m'));

echo date('m月', strtotime('+1 month', $timestamp));

こうやると、$timestampには今月の1日のタイムスタンプが入るから、今日が何日であろうともちゃんと来月が出力される。

一応こんな感じで回避することもできるんですけど、ちょっとダサいかも?

あと、php4だとこの場合、$timestampは1970-01-01になってしまうようなので、date(‘Y-m’)をdate(‘Y-m-01’)とかにする必要があるっぽい。

あるいはmktimeを使うとか。

$timestamp = mktime(0,0,0,date('m'),1,date('Y');

echo date('m月', strtotime('+1 month', $timestamp));

ものすごく関係ないけど、

(‘m’) ←顔文字っぽいよね。

LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

プログラマのまっちーです。酒が大好きです。ある一定量のお酒を飲むと壊れたレディオモードに入り、同じことを繰り返す癖があります。宜しくお願いいたします。

このメンバーの記事をもっと読む
デザイン力×グローバルな開発体制でDXをトータル支援
お問い合わせ 会社概要DL