カレンダー作成問題[Ruby]
こちらの記事の1問目をやってみた。 blog.jnito.com
require 'date' #今日 d = Date.today #今月と今年 m_y = d.strftime("%B %Y") #月初の曜日 fd = Date.parse(Date.today.strftime('%Y-%m-01')) fd = fd.strftime("%a") #月末の日付 ld = Date.new(Time.now.year, Time.now.month, -1).day puts " " << m_y puts " Su Mo Tu We Th Fr Sa" array = [] for num in 1..ld do array << num.to_s.rjust(3) end case fd when "Sun" then print "" blank_day = 0 when "Mon" then print " " blank_day = 1 when "Tus" then print " " blank_day = 2 when "Wed" then print " " blank_day = 3 when "Thu" then print " " blank_day = 4 when "Fri" then print " " blank_day = 5 when "Sat" then print " " blank_day = 6 end array.each do |day| print day day = day.to_i + blank_day if day.to_i % 7 == 0 then puts "" end end puts ""
fdのところがかなりいまいちだとは思った。
解いた方の記事を見た。 qiita.com
リファクタリングした。
require 'date' #今日 d = Date.today #今月と今年 m_y= d.strftime("%B %Y") #月初の曜日(0~6) fd = Date.new(d.year,d.mon,1).wday #月末の日付 ld = Date.new(d.year, d.month, -1).day puts " " << m_y puts " Su Mo Tu We Th Fr Sa" array = [] for num in 1..ld do array << num.to_s.rjust(3) end fd.times do print " " end array.each do |day| print day day = day.to_i + fd if day.to_i % 7 == 0 then puts "" end end puts ""
曜日を0~6の値で表すことでだいぶすっきりした!