LoginSignup
8
10

More than 5 years have passed since last update.

date("Y_W")の罠

Last updated at Posted at 2013-12-30

@2013/12/30
突然ですが以下の出力はどうなると思いますか?

echo date("Y_W");

「"2013_"の…ごじゅう…」
と思いますよね!
思うじゃないですか!
しかし実際の出力は以下のようになります。

2013_1

(`◎△◎)!?
な… 何を言っているのか わからねーと思うが おれも(ry

失礼、取り乱しました(´ー`;)
table名をdate("Y_W")とかでインクリメントしてたりすると年末にひどい事になる訳ですがなぜこのような事がおこるのかというと、

W | ISO-8601 月曜日に始まる年単位の週番号

ISO-8601さんどういう事ですかーとぐぐると

ある年における、「最初の木曜日を含む週が、その年の第1週である。」と規定されている。
ISO_8601

(゚ー゚;ナ、ナルホド~
つまり
Y:2013年です。
W:2014年1週目です。
と見事にお二人の呼吸が合わず2013_1という残念な結果を返してしまったのでした…orz
対処法はいたってシンプル。

o | ISO-8601 形式の年。これは Y ほぼ同じだが、ISO 週番号 (W)が前年あるいは翌年に属する場合がある点で 異なる(PHP 5.1.0 で追加)。

との事ですので

echo date("o_W");

としてあげれば

2014_1

oさんGJ!

ちなみに2015/01/01は木曜日(!)ですので2014年も12/29からdate("W")さんが1を返し始めますのでお気をつけて。
よいお年を〜(⌒∇⌒)ノ""

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10