请输入您要查询的百科知识:

 

词条 Module:Calendar date/Recurring
释义 --[[

Calculates the Gregorian date of a recurring holiday that varies year-to-year, but follows the rule "Nth [day of week] of [month]"

  "month" = month number (1 to 12)  "weeknumber" = number of week (1 to 4, or -1 to mean "last")  "dayofweek" = number that represents the day of the week, where 1 = Sunday and 7 = Saturday  "year" = Gregorian calendar year                ]]

require('Module:No globals')

local p = {}

function p.calculate(frame)

local args = frame.args

local ONE_DAY = 86400 -- number of seconds in one day

local year = tonumber(args.year)

local month = tonumber(args.month)

local weeknumber = tonumber(args.weeknumber)

local dayofweek = tonumber(args.dayofweek)

local date = os.time{year=year, month=month, day=1}

local dateparts = os.date("*t", date)

if weeknumber > 0 then

-- find the first [dayofweek] of this month

while dateparts["wday"] ~= dayofweek do

date = date + ONE_DAY

dateparts = os.date("*t", date)

end

-- add the correct number of weeks

if weeknumber > 1 then

date = date + ((weeknumber - 1) * (7 * ONE_DAY))

end

else

-- find the first day of the next month

while dateparts["month"] == month do

date = date + ONE_DAY

dateparts = os.date("*t", date)

end

-- go back one day to get the last day of the month we want

date = date - ONE_DAY

dateparts = os.date("*t", date)

-- go backwards until we find the right day of week

while dateparts["wday"] ~= dayofweek do

date = date - ONE_DAY

dateparts = os.date("*t", date)

end

end

local result = os.date("%Y-%m-%d", date)

return result

end

return p

随便看

 

开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/11/17 21:14:32