Module:Birthday
跳到导航
跳到搜索
local module = {} local getArgs = require('Module:Arguments').getArgs function module._main(args) args[1] = tonumber(args[1]) args[2] = tonumber(args[2]) -- 默认值暂时使用GMT,即不手动指定时区时维持原状;但也许改为UTC+8更合适? local time = os.time() + (tonumber(args.tz) or 0) * 3600 local month = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } if args[1] < 1 or args[1] > 12 then error('请输入正确的月份!') end if args[2] < 1 or args[2] > month[args[1]] then error('请输入正确的日期!') end function isLeapYear(year) local year = year or os.date('%Y', time) if (year % 4 == 0) and (year % 100 ~= 0 or year % 400 == 0) then return true end return false end if isLeapYear() == false then month[2] = 28 end local count = args[2] for i=1, args[1] - 1 do count = count + month[i] end local year = os.date('%Y', time) + 1 local num = tonumber(os.date('%j', time)) count = count - num if count < 0 then local foo = 0 if isLeapYear(year) then if (args[1] == 2 and args[2] == 29) or args[1] > 2 then foo = 1 end end count = count + 365 + foo end -- 针对2月29日的计算 if(args[1] == 2 and args[2] == 29) then count = 0 if isLeapYear() == false or num > 60 then local foo = 0 if isLeapYear() and num > 60 then foo = 1 end count = 365 - num + foo while isLeapYear(year) == false do count = count + 365 year = year + 1 end count = count + 60 else count = 60 - num end end count = math.floor(count) return count end function module.main(frame) local args = getArgs(frame, {wrappers='Template:生日倒计时'}) return module._main(args) end return module