40 lines
970 B
Lua
40 lines
970 B
Lua
-- calender by rnd, 30 minutes with bugfixes
|
|
|
|
dayofweek = function(y,m,d)
|
|
local offsets = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
|
|
if m<3 then y=y-1 end
|
|
return (y+math.floor(y/4)-math.floor(y/100)+math.floor(y/400)+offsets[m]+d) % 7+1
|
|
end
|
|
|
|
y=2000
|
|
m=8
|
|
d=1
|
|
--say(dayofweek(y,m,d))
|
|
|
|
|
|
|
|
make_calender = function(y,m)
|
|
local start_day = dayofweek(y,m,1)
|
|
local months = {31,29,31,30,31,30,31,31,30,31,30,31};
|
|
if y%4==0 and (y%100~=0 or y%400 == 0) then months[2]= 30 end -- feb has 30 days on leap year
|
|
local out = minetest.colorize("red",m.."/"..y).."\nsun mon tue wed thu fri sat\n"
|
|
out = out .. string.rep("__ ",start_day-1)
|
|
local i = start_day;
|
|
local idx = 1;
|
|
while idx<=months[m] do
|
|
out = out .. string.format("%02d",idx) .. " ";
|
|
if i%7 ==0 then out = out .."\n" end
|
|
idx = idx+1
|
|
i=i+1
|
|
end
|
|
|
|
|
|
return out
|
|
end
|
|
|
|
ret = {}
|
|
for m = 1,12 do
|
|
ret[#ret+1]=make_calender(y,m)
|
|
end
|
|
|
|
self.label(table.concat(ret,"\n\n")) |