用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