用lua实现万年历

日历一般以月份来展示,实现万年历重点是要取得每个月份的显示数据。

而只要知道要显示的第一天,就可以获得整个月份的数据。

代码如下:

--万年历
local UNIT = 60 * 60 * 24
local COUNT = 6 * 7

local Calendar = {}

--获取当月显示数据 time:要显示年份月份的任一时间点 count 当月要显示的天数
function Calendar:getData(time, count)
    count = count or COUNT
    local tab_time = os.date("*t", time)
    local year = tab_time.year
    local month = tab_time.month

    --当月第一天
    local t1 = os.time({year = year, month = month, day = 1, hour = 0})
    local tab_t1 = os.date("*t", t1)
    local wday = tab_t1.wday --1-7

    --显示第一天
    local t2
    if wday == 1 then
        t2 = t1 - 7 * UNIT
    else
        t2 = t1 - (wday - 1) * UNIT
    end

    local data = {}
    for i = 1, count do
        data[i] = t2 + (i - 1) * UNIT
    end
    return data
end


local data = Calendar:getData(os.time({year=2018,month=4,day=15,hour=0}))
for k,v in pairs(data) do
    print(k,os.date("%Y.%m.%d %H:%M:%S %A %w",v))
end

用lua实现万年历.doc