Module:BassaridianCalendar
From MicrasWiki
Documentation for this module may be created at Module:BassaridianCalendar/doc
local p = {}
function p.getCurrentDate()
-- Get the current Gregorian date
local currentDate = os.date("*t")
local gregorianDay = currentDate.yday -- Day of the year (1-365/366)
local isLeapYear = (currentDate.year % 4 == 0 and (currentDate.year % 100 ~= 0 or currentDate.year % 400 == 0))
local totalDays = isLeapYear and 366 or 365 -- Total days in the Gregorian year
-- PSSC and Bassaridian calendar constants
local bassaridianStart = 237 -- August 25th is the 237th day of the Gregorian year
local calendarDays = 183 -- Total days in the Bassaridian year
-- Calculate PSSC year
local psscYear = currentDate.year - 1970 + (gregorianDay >= 60 and 1 or 0) -- PSSC year increments on March 1st
-- Calculate Bassaridian day
local adjustedDay = gregorianDay - bassaridianStart
if adjustedDay < 0 then
adjustedDay = adjustedDay + totalDays -- Wrap around for the previous year
end
local bassaridianDay = (adjustedDay % calendarDays) + 1
-- Determine month and zodiac sign
local month, zodiacSign
if bassaridianDay <= 61 then
month = "Atosiel"
if bassaridianDay <= 12 then
zodiacSign = "Atosien"
elseif bassaridianDay <= 24 then
zodiacSign = "Eosena"
elseif bassaridianDay <= 36 then
zodiacSign = "Micrasha"
elseif bassaridianDay <= 48 then
zodiacSign = "Pyreska"
else
zodiacSign = "Indomin"
end
elseif bassaridianDay <= 121 then
month = "Thalassiel"
if bassaridianDay <= 73 then
zodiacSign = "Chrysen"
elseif bassaridianDay <= 85 then
zodiacSign = "Thalassian"
elseif bassaridianDay <= 97 then
zodiacSign = "Nephelia"
elseif bassaridianDay <= 109 then
zodiacSign = "Glinaeus"
else
zodiacSign = "Noctien"
end
else
month = "Opsitheiel"
if bassaridianDay <= 133 then
zodiacSign = "Opsithia"
elseif bassaridianDay <= 145 then
zodiacSign = "Stygian"
elseif bassaridianDay <= 157 then
zodiacSign = "Faunian"
elseif bassaridianDay <= 169 then
zodiacSign = "Silenian"
else
zodiacSign = "Catosien"
end
end
-- Event lookup table
local events = {
["Atosiel,6"] = "Bayram al-Nur (Festival of Light) in [[Vaeringheim]]",
["Atosiel,18"] = "Chag Or Hadash (Festival of New Light) in [[Luminaria]]",
["Atosiel,30"] = "Symposion Eirinis (Symposium of Harmony) in [[Serena]]",
["Atosiel,43"] = "Alev Günü (Day of Flame) in [[Pyralis]]",
["Atosiel,55"] = "Tikkun Tzel (Repair of Shadows) in [[Symphonara]]",
["Thalassiel,67"] = "Panegyris Chrysou (Golden Gathering) in [[Aurelia]]",
["Thalassiel,80"] = "Mehtap Dalgası (Moonlit Tide) in [[Vaeringheim]]",
["Thalassiel,92"] = "Oneiro Foteino (Dream of Illumination) in [[Somniumpolis]]",
["Thalassiel,105"] = "Erev Galgal (Eve of Cycles) in [[Nexa]]",
["Thalassiel,115"] = "Leilat al-Kamar (Night of the Moon) in [[Lunalis Sancta]]",
["Opsitheiel,128"] = "Chag Tvuah (Festival of Harvest) in [[Sylvapolis]]",
["Opsitheiel,140"] = "Anagenesis Eirmos (Procession of Rebirth) in [[Acheron]]",
["Opsitheiel,150"] = "Panagia Therizis (Holy Day of the Reaper) in [[Sylvapolis]]",
["Opsitheiel,165"] = "Karnavali Thysias (Carnival of Celebration) in [[Erythros]]",
["Opsitheiel,175"] = "Sefar Yashar (Straight Path Celebration) in [[Catonis Atrium]]",
}
-- Find event for the current date
local eventKey = month .. "," .. bassaridianDay
local event = events[eventKey] or "No significant events today."
-- Return formatted date
return bassaridianDay .. ", " .. month .. " (" .. zodiacSign .. "), " .. psscYear .. " PSSC – " .. event
end
return p