Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

RubyでN月1日が通算何週目か調べる

今日は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