今月のカレンダーを出力するスクリプト

書いてみた。
すごくシンプルだと思う。

require "date"

today = Date.today
firstday = Date.new(today.year, today.month, 1)
lastday = Date.new(today.year, today.month, -1)

puts today.strftime("%B %Y").center(21)
puts "Su Mo Tu We Th Fr Sa"
wday = firstday.wday
print "   " * wday
firstday.day.upto(lastday.day){|d|
  printf("%2d ", d)
  wday += 1
  if wday == 7
    puts
    wday = 0
  end
}

ポイントを以下に。

  • Date.newの日付を-1にすると、その月の月末を指定
  • Date#strftimeでフォーマットを指定して出力
  • center(width)で中央寄せ
  • Date#wdayで週の何日目かを取得(日曜が0)


結果はこんな感じで出力される。

      May 2007
Su Mo Tu We Th Fr Sa
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31