<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ACalendar_date%2Frecurring</id>
	<title>Module:Calendar date/recurring - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ACalendar_date%2Frecurring"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Calendar_date/recurring&amp;action=history"/>
	<updated>2026-04-21T10:25:46Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Calendar_date/recurring&amp;diff=135452&amp;oldid=prev</id>
		<title>imported&gt;Legoktm: Replace Module:No globals with require( &quot;strict&quot; )</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Calendar_date/recurring&amp;diff=135452&amp;oldid=prev"/>
		<updated>2022-10-21T21:13:59Z</updated>

		<summary type="html">&lt;p&gt;Replace &lt;a href=&quot;/research/Module:No_globals&quot; title=&quot;Module:No globals&quot;&gt;Module:No globals&lt;/a&gt; with require( &amp;quot;strict&amp;quot; )&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[ &lt;br /&gt;
&lt;br /&gt;
Calculates the Gregorian date of a recurring holiday that varies year-to-year, but follows the rule &amp;quot;Nth [day of week] of [month]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;month&amp;quot; = month number (1 to 12)&lt;br /&gt;
  &amp;quot;weeknumber&amp;quot; = number of week (1 to 4, or -1 to mean &amp;quot;last&amp;quot;)&lt;br /&gt;
  &amp;quot;dayofweek&amp;quot; = number that represents the day of the week, where 1 = Sunday and 7 = Saturday&lt;br /&gt;
  &amp;quot;year&amp;quot; = Gregorian calendar year&lt;br /&gt;
               &lt;br /&gt;
 ]]&lt;br /&gt;
&lt;br /&gt;
require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.calculate(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
&lt;br /&gt;
	local ONE_DAY = 86400 -- number of seconds in one day&lt;br /&gt;
	local year = tonumber(args.year)&lt;br /&gt;
	local month = tonumber(args.month)&lt;br /&gt;
	local weeknumber = tonumber(args.weeknumber)&lt;br /&gt;
	local dayofweek = tonumber(args.dayofweek)&lt;br /&gt;
&lt;br /&gt;
	local date = os.time{year=year, month=month, day=1}&lt;br /&gt;
	local dateparts = os.date(&amp;quot;*t&amp;quot;, date)&lt;br /&gt;
	&lt;br /&gt;
	if weeknumber &amp;gt; 0 then&lt;br /&gt;
		-- find the first [dayofweek] of this month&lt;br /&gt;
		while dateparts[&amp;quot;wday&amp;quot;] ~= dayofweek do&lt;br /&gt;
			date = date + ONE_DAY&lt;br /&gt;
			dateparts = os.date(&amp;quot;*t&amp;quot;, date)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- add the correct number of weeks&lt;br /&gt;
		if weeknumber &amp;gt; 1 then&lt;br /&gt;
			date = date + ((weeknumber - 1) * (7 * ONE_DAY))&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- find the first day of the next month&lt;br /&gt;
		while dateparts[&amp;quot;month&amp;quot;] == month do&lt;br /&gt;
			date = date + ONE_DAY&lt;br /&gt;
			dateparts = os.date(&amp;quot;*t&amp;quot;, date)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- go back one day to get the last day of the month we want&lt;br /&gt;
		date = date - ONE_DAY&lt;br /&gt;
		dateparts = os.date(&amp;quot;*t&amp;quot;, date)&lt;br /&gt;
&lt;br /&gt;
		-- go backwards until we find the right day of week&lt;br /&gt;
		while dateparts[&amp;quot;wday&amp;quot;] ~= dayofweek do&lt;br /&gt;
			date = date - ONE_DAY&lt;br /&gt;
			dateparts = os.date(&amp;quot;*t&amp;quot;, date)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local result = os.date(&amp;quot;%Y-%m-%d&amp;quot;, date)&lt;br /&gt;
	return result&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Legoktm</name></author>
	</entry>
</feed>