塩焼きブログ

塩焼きに関しての研究内容を公開しています

Rubyで第NのX曜日を取得する

Rubyで第4日曜日の取得を行うといった処理をどう記述するか。方法は色々とあると思うが、曜日ごとのハッシュに順に日を格納して取り出すという地道な方法で書いてみた。

require "Date"
require "Time"

year = 2014
month = 9
weeks = {0 => [], 1 => [], 2 => [], 3 => [], 4 => [], 5 => [], 6 => []}
last_day = Date.new(year, month , -1).mday
last_day.times do |d|
  date = Time.parse("#{year}-#{month}-#{d+1}")
  weeks[date.wday.to_i] << d + 1
end
p weeks

# {
#   "0"=>[7, 14, 21, 28],
#   "1"=>[1, 8, 15, 22, 29],
#   "2"=>[2, 9, 16, 23, 30],
#   "3"=>[3, 10, 17, 24],
#   "4"=>[4, 11, 18, 25],
#   "5"=>[5, 12, 19, 26],
#   "6"=>[6, 13, 20, 27]
# }

# 第4日曜日
puts weeks[0][3] unless weeks[0][3].nil?
# 第2水曜日
puts weeks[3][1] unless weeks[3][1].nil?
# 第1土曜日
puts weeks[6][0] unless weeks[6][0].nil?