今日はRubyでN月1日が通算何週目か調べる方法について紹介します。
例えば、2013年4月1日は第14週目ですね。
結論
結論から先に書きますと、
require 'date' 12.times do |i| d = Date.new(2013,i + 1,1) puts %Q( #{i + 1}/1 Week\##{(d.cweek)} #{d.strftime("%A")} ) end
##結果## 1/1 Week#1 Tuesday 2/1 Week#5 Friday 3/1 Week#9 Friday 4/1 Week#14 Monday 5/1 Week#18 Wednesday 6/1 Week#22 Saturday 7/1 Week#27 Monday 8/1 Week#31 Thursday 9/1 Week#35 Sunday 10/1 Week#40 Tuesday 11/1 Week#44 Friday 12/1 Week#48 Sunday
で答えが得られます。
答えに至まで
特になにも考えずにirbで
12.times do |i| puts ( "#{i + 1}/1 Week\##{(Time.local(2013,i + 1,1).strftime("%U").to_i + 1 )}." ) end
とやったのですが、2012年や2016年だと第一週が第二週になるという謎現象が。
色々調べた所、ISO 8601 - Wikipediaに答えがありました
ある年における、「最初の木曜日を含む週が、その年の第1週である。」と規定されている。
「第1週は事実上、1月4日を含む週である。」という基準認識に等しい。
ものすごく直感に反する……でも国際規格様に逆らうわけにもいきませんので冒頭のコマンドを利用しました。
(2013-11-17追記)ワンライナー版
ワンライナー版をつくりました。詳しくは以下のリンクより。
http://shuzo-kino.hateblo.jp/entry/2013/11/17/131904