昨天参加完上海 RailsGril,遇到一个日历打印的问题,及输入任何一个日期,打印出当月的日历。
写了一段 Rails 小代码:
class Calendar
attr_reader :time
def initialize(time=Time.now)
@time = time
unless time.is_a? Time
@time = Time.parse time
end
end
def render
all_days = render_days
puts '日|一|二|三|四|五|六'
all_days.each_slice(7).to_a.each do |days_in_week|
days_in_week.map!{|day| day.length == 1? "#{day} " : day}
puts days_in_week.join('|')
end
nil
end
def render_days
Array.new(time.at_beginning_of_month.wday, ' ') + (1..Time.days_in_month(time.month)).map(&:to_s)
end
end
执行代码输出结果如下:
Calendar.new.render
日|一|二|三|四|五|六
| | | | | |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
calendar = Calendar.new('2015/07/01')
calendar.render
日|一|二|三|四|五|六
| | |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
总结: 有几个关于 Time 的 helper 方法, 比如 time.at_beginning_of_month, Time.days_in_month 的使用。