`

ruby calendar

阅读更多
def month_day(month, year=Date.today.year)
    mdays = [nil, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    mdays[2] = 29 if Date.leap?(year)
    mdays[month]
  end

  def calendar(month, year)
    days = month_day(month, year)
    t = Time.mktime(year, month, 1)
    first = t.wday
    list = *1..days
    weeks = [[]]
    week1 = 7 - first
    week1.times { weeks[0] << list.shift }
    nweeks = list.size/7 + 1
    nweeks.times do |i|
      weeks[i+1] ||= []
      7.times do
        break if list.empty?
        weeks[i+1] << list.shift
      end
    end
    pad_first = 7 - weeks[0].size
    pad_first.times { weeks[0].unshift(nil) }
    pad_last = 7 - weeks[0].size
    pad_last.times { weeks[-1].unshift(nil) }
    weeks
  end

  def calendar_table(month, year)
    today = Time.now.day
    table_body = “”
    calendar(month, year).each do |week|
      table_body += “<tr>”
      week.each do |day|
        if day.nil?
          table_body += “<td></td>”
        else
          table_body += (day == today) ? “<td class=’today’>” : “<td>”
          table_body += “#{day}</td>”
        end
      end
      table_body += “</tr>”
    end
    table_body
  end


======================================================
所有strftime方法中可用的格式化符号:
======================================================
%a    星期的缩写,如Wed
%A    星期的全称,如Wednesday
%U    本星期在全年中所属的周数
%W   
%H    小时(24小时制)
%M    分钟
%S    秒
%I    小时(12小时制)
%p    PM 或 AM

%b    月份的缩写,如 Jan
%B    月份的全称,如 January
%c    本地日期和时间,如 06/14/07 16:43:49
%d    日期 (1..31)
%j    本日在一年中所属的天 (1..366)
%m    月份 (1..12)
%w    星期的数字形式 (0..6)
%x    本地日期,如 06/14/07
%Y    本地时间,如 16:43:49
%y    2位的年份表示,如07
%Y    4位的年份表示,如2007
%Z    时区名,如"中国标准时间"
%%    字面符号%
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics