<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.projectaquila.net/index.php?action=history&amp;feed=atom&amp;title=Module%3ACalendar</id>
	<title>Module:Calendar - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.projectaquila.net/index.php?action=history&amp;feed=atom&amp;title=Module%3ACalendar"/>
	<link rel="alternate" type="text/html" href="https://wiki.projectaquila.net/index.php?title=Module:Calendar&amp;action=history"/>
	<updated>2026-11-03T19:41:08Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.projectaquila.net/index.php?title=Module:Calendar&amp;diff=6196&amp;oldid=prev</id>
		<title>Baseplate: Baseplate moved page Module:Calender to Module:Calendar</title>
		<link rel="alternate" type="text/html" href="https://wiki.projectaquila.net/index.php?title=Module:Calendar&amp;diff=6196&amp;oldid=prev"/>
		<updated>2026-10-24T09:38:54Z</updated>

		<summary type="html">&lt;p&gt;Baseplate moved page &lt;a href=&quot;/index.php/Module:Calender&quot; class=&quot;mw-redirect&quot; title=&quot;Module:Calender&quot;&gt;Module:Calender&lt;/a&gt; to &lt;a href=&quot;/index.php/Module:Calendar&quot; title=&quot;Module:Calendar&quot;&gt;Module:Calendar&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 09:38, 24 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wiki:diff:1.41:old-6193:rev-6196 --&gt;
&lt;/table&gt;</summary>
		<author><name>Baseplate</name></author>
	</entry>
	<entry>
		<id>https://wiki.projectaquila.net/index.php?title=Module:Calendar&amp;diff=6193&amp;oldid=prev</id>
		<title>Baseplate: Created page with &quot;local p = {}   local LAUNCH = { year = 2026, month = 7, day = 28 } local ERA = &quot;Era Nova&quot;   local PERIODS = {     &quot;Early January&quot;,     &quot;January--February&quot;,     &quot;February--March&quot;,     &quot;March--April&quot;,     &quot;April--May&quot;,     &quot;May--June&quot;,     &quot;June&quot;,     &quot;June--July&quot;,     &quot;July--August&quot;,     &quot;August--September&quot;,     &quot;September--October&quot;,     &quot;October--November&quot;,     &quot;November--December&quot;,     &quot;Late December&quot;, } local DAYS_PER_YEAR = #PERIODS   p.periods = PERIODS p.daysPerYear...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.projectaquila.net/index.php?title=Module:Calendar&amp;diff=6193&amp;oldid=prev"/>
		<updated>2026-10-24T09:35:50Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local p = {}   local LAUNCH = { year = 2026, month = 7, day = 28 } local ERA = &amp;quot;Era Nova&amp;quot;   local PERIODS = {     &amp;quot;Early January&amp;quot;,     &amp;quot;January--February&amp;quot;,     &amp;quot;February--March&amp;quot;,     &amp;quot;March--April&amp;quot;,     &amp;quot;April--May&amp;quot;,     &amp;quot;May--June&amp;quot;,     &amp;quot;June&amp;quot;,     &amp;quot;June--July&amp;quot;,     &amp;quot;July--August&amp;quot;,     &amp;quot;August--September&amp;quot;,     &amp;quot;September--October&amp;quot;,     &amp;quot;October--November&amp;quot;,     &amp;quot;November--December&amp;quot;,     &amp;quot;Late December&amp;quot;, } local DAYS_PER_YEAR = #PERIODS   p.periods = PERIODS p.daysPerYear...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
 &lt;br /&gt;
local LAUNCH = { year = 2026, month = 7, day = 28 }&lt;br /&gt;
local ERA = &amp;quot;Era Nova&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
local PERIODS = {&lt;br /&gt;
    &amp;quot;Early January&amp;quot;,&lt;br /&gt;
    &amp;quot;January--February&amp;quot;,&lt;br /&gt;
    &amp;quot;February--March&amp;quot;,&lt;br /&gt;
    &amp;quot;March--April&amp;quot;,&lt;br /&gt;
    &amp;quot;April--May&amp;quot;,&lt;br /&gt;
    &amp;quot;May--June&amp;quot;,&lt;br /&gt;
    &amp;quot;June&amp;quot;,&lt;br /&gt;
    &amp;quot;June--July&amp;quot;,&lt;br /&gt;
    &amp;quot;July--August&amp;quot;,&lt;br /&gt;
    &amp;quot;August--September&amp;quot;,&lt;br /&gt;
    &amp;quot;September--October&amp;quot;,&lt;br /&gt;
    &amp;quot;October--November&amp;quot;,&lt;br /&gt;
    &amp;quot;November--December&amp;quot;,&lt;br /&gt;
    &amp;quot;Late December&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
local DAYS_PER_YEAR = #PERIODS&lt;br /&gt;
 &lt;br /&gt;
p.periods = PERIODS&lt;br /&gt;
p.daysPerYear = DAYS_PER_YEAR&lt;br /&gt;
 &lt;br /&gt;
local function trim(s)&lt;br /&gt;
    return (tostring(s or &amp;quot;&amp;quot;):match(&amp;quot;^%s*(.-)%s*$&amp;quot;))&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
local function daysFromCivil(y, m, d)&lt;br /&gt;
    if m &amp;lt;= 2 then y = y - 1 end&lt;br /&gt;
    local era = math.floor(y / 400)&lt;br /&gt;
    local yoe = y - era * 400&lt;br /&gt;
    local mp = (m + 9) % 12&lt;br /&gt;
    local doy = math.floor((153 * mp + 2) / 5) + d - 1&lt;br /&gt;
    local doe = yoe * 365 + math.floor(yoe / 4) - math.floor(yoe / 100) + doy&lt;br /&gt;
    return era * 146097 + doe - 719468&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
local function civilFromDays(z)&lt;br /&gt;
    z = z + 719468&lt;br /&gt;
    local era = math.floor(z / 146097)&lt;br /&gt;
    local doe = z - era * 146097&lt;br /&gt;
    local yoe = math.floor(&lt;br /&gt;
        (doe - math.floor(doe / 1460) + math.floor(doe / 36524) - math.floor(doe / 146096)) / 365&lt;br /&gt;
    )&lt;br /&gt;
    local y = yoe + era * 400&lt;br /&gt;
    local doy = doe - (365 * yoe + math.floor(yoe / 4) - math.floor(yoe / 100))&lt;br /&gt;
    local mp = math.floor((5 * doy + 2) / 153)&lt;br /&gt;
    local d = doy - math.floor((153 * mp + 2) / 5) + 1&lt;br /&gt;
    local m = mp + 3&lt;br /&gt;
    if m &amp;gt; 12 then m = m - 12 end&lt;br /&gt;
    if m &amp;lt;= 2 then y = y + 1 end&lt;br /&gt;
    return y, m, d&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
local LAUNCH_DAYNUM = daysFromCivil(LAUNCH.year, LAUNCH.month, LAUNCH.day)&lt;br /&gt;
local LAUNCH_ISO = string.format(&amp;quot;%04d-%02d-%02d&amp;quot;, LAUNCH.year, LAUNCH.month, LAUNCH.day)&lt;br /&gt;
 &lt;br /&gt;
function p.pretty(period)&lt;br /&gt;
    return (tostring(period or &amp;quot;&amp;quot;):gsub(&amp;quot;%-%-&amp;quot;, &amp;quot;–&amp;quot;))&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function p.parse(text)&lt;br /&gt;
    text = trim(text)&lt;br /&gt;
    if text == &amp;quot;&amp;quot; then&lt;br /&gt;
        return nil, &amp;quot;no date was given&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    local y, m, d = text:match(&amp;quot;^(%d%d%d%d)[%-/%.](%d%d?)[%-/%.](%d%d?)%f[%D]&amp;quot;)&lt;br /&gt;
    if not y then&lt;br /&gt;
        return nil, &amp;quot;“&amp;quot; .. text .. &amp;quot;” is not in YYYY-MM-DD format&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    y, m, d = tonumber(y), tonumber(m), tonumber(d)&lt;br /&gt;
 &lt;br /&gt;
    local z = daysFromCivil(y, m, d)&lt;br /&gt;
    local ry, rm, rd = civilFromDays(z)&lt;br /&gt;
    if m &amp;lt; 1 or m &amp;gt; 12 or d &amp;lt; 1 or ry ~= y or rm ~= m or rd ~= d then&lt;br /&gt;
        return nil, &amp;quot;“&amp;quot; .. text .. &amp;quot;” is not a real calendar date&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    local offset = z - LAUNCH_DAYNUM&lt;br /&gt;
    if offset &amp;lt; 0 then&lt;br /&gt;
        return nil, &amp;quot;“&amp;quot; .. text .. &amp;quot;” is before the server launched (&amp;quot; .. LAUNCH_ISO .. &amp;quot;)&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    return string.format(&amp;quot;%04d-%02d-%02d&amp;quot;, y, m, d), offset&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function p.info(text)&lt;br /&gt;
    local iso, offset = p.parse(text)&lt;br /&gt;
    if not iso then&lt;br /&gt;
        return nil, offset&lt;br /&gt;
    end&lt;br /&gt;
    local day = offset % DAYS_PER_YEAR + 1&lt;br /&gt;
    return {&lt;br /&gt;
        iso = iso,&lt;br /&gt;
        year = math.floor(offset / DAYS_PER_YEAR) + 1,&lt;br /&gt;
        day = day,&lt;br /&gt;
        period = PERIODS[day],&lt;br /&gt;
    }&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function p.realDate(year, day)&lt;br /&gt;
    local y, m, d = civilFromDays(LAUNCH_DAYNUM + (year - 1) * DAYS_PER_YEAR + (day - 1))&lt;br /&gt;
    return string.format(&amp;quot;%04d-%02d-%02d&amp;quot;, y, m, d)&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function p.iso(frame)&lt;br /&gt;
    local i = p.info(frame.args[1])&lt;br /&gt;
    return i and i.iso or &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function p.yearNum(frame)&lt;br /&gt;
    local i = p.info(frame.args[1])&lt;br /&gt;
    return i and tostring(i.year) or &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function p.dayNum(frame)&lt;br /&gt;
    local i = p.info(frame.args[1])&lt;br /&gt;
    return i and tostring(i.day) or &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function p.period(frame)&lt;br /&gt;
    local i = p.info(frame.args[1])&lt;br /&gt;
    return i and i.period or &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function p.label(frame)&lt;br /&gt;
    local i = p.info(frame.args[1])&lt;br /&gt;
    return i and p.pretty(i.period) or &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function p.yearName(frame)&lt;br /&gt;
    local i = p.info(frame.args[1])&lt;br /&gt;
    return i and (ERA .. &amp;quot;, Year &amp;quot; .. i.year) or &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function p.prettify(frame)&lt;br /&gt;
    return p.pretty(frame.args[1])&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function p.check(frame)&lt;br /&gt;
    local i, message = p.info(frame.args[1])&lt;br /&gt;
    if i then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return &amp;#039;&amp;lt;div class=&amp;quot;error&amp;quot; style=&amp;quot;margin: 0 0 1em;&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;RealDate problem:&amp;lt;/strong&amp;gt; &amp;#039;&lt;br /&gt;
        .. message&lt;br /&gt;
        .. &amp;#039;. Use YYYY-MM-DD, for example 2026-09-15.&amp;lt;/div&amp;gt;[[Category:Pages with a date problem]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Baseplate</name></author>
	</entry>
</feed>