ある日からある日までの Range を週ごとの Range に分ける

日付のRangeを週に切り出すスクリプト - はこべにっき#を僕なりに書いてみた。
こんな感じでいいのかな?

gen-weeks.rb

2008/04/01 から 2008/04/21 までの Range を週ごとに分ける

require 'date'

def gen_weeks(range)
  weeks = []
  week  = []
  range.each do |date|
    week << date
    if date.wday == 6
      weeks << week
      week = []
    end
  end
  weeks << week
end

weeks = gen_weeks(Date.new(2008, 4, 1) .. Date.new(2008, 4, 21))
weeks.each do |week|
  print week.map {|date| "%2d" % date.day }.join(' '); puts
  puts '-' * 20
end
実行結果
 1  2  3  4  5
--------------------
 6  7  8  9 10 11 12
--------------------
13 14 15 16 17 18 19
--------------------
20 21
--------------------

追記

  • week の要素を day にすると day.day などが出てきてややこしかったので date に変更した
  • week を出力するときに一番最後の空白は入らなかったのでなくした