sourcehypertextpubliccalendricalen.pug

//- meta
	slug: calendrical
	translates: calendrical
	lang: en
	title: A calendrical table
	pageCreated: "2021-01-19"
	pageUpdated: "2025-10-08"

extends ../../views/layout.pug

append presets
	- hasSidenotes = true
	- const thisYear = new Date().getFullYear();

append cosmetics
	link(href="/calendrical/calendrical.css", rel="stylesheet")
	script(src="/calendrical/cal.js", type="module")

mixin calendarRow(feast, isFirstOne = false)
	tr
		td.weekdays= "☉☽♂☿♃♀♄"[feast.attic.weekday]
		td.gregorian
			if feast.gregorian.endsWith("01")
				strong!= grimm.date.ce("en", feast.gregorian).replace(/^([0-9]+) (.*?) 0?([123]?[0-9])$/, "$3 $2 $1")
			else
				| !{grimm.date.ce("en", feast.gregorian).replace(/^([0-9]+) (.*?) 0?([123]?[0-9])$/, "$3 $2 $1")}
		td.attic
			if feast.attic.signedDate == 1
				strong!= grimm.date.attic("en", feast.gregorian)
			else
				| !{grimm.date.attic("en", feast.gregorian)}
		td.holidays
			| !{feast.feasts.en}
			if isFirstOne && feast.gregorian.endsWith("11-05")
				+sn(1)

mixin calendar(year, isFirstOne = false)
	- const yearCal = annexe(year)
	div.table-container.calendar
		table
			thead
				tr
					th Day
					th Gregorian
					th Attic
					th Holiday
			tbody
				each day in yearCal
					+calendarRow(day, isFirstOne)

block content
	form#calendar-converter
		strong#conv-atticDate Loading…
		fieldset#conv-gregorian
			legend Enter Gregorian date
			#conv-gregorianGroup
				input#conv-gregDay(type="number" name="gregDay" value="1" min="1" max="31")
				|  
				select#conv-gregMonth(name="gregMonth")
					option(value="1" selected) January
					option(value="2") February
					option(value="3") March
					option(value="4") April
					option(value="5") May
					option(value="6") June
					option(value="7") July
					option(value="8") August
					option(value="9") September
					option(value="10") October
					option(value="11") November
					option(value="12") December
				| , 
				input#conv-gregYear(type="number" name="gregYear" value="1999" min="100")
		fieldset#conv-settings
			legend Settings
			#conv-settingsGroup
				.form-group
					select#conv-monthNames(name="monthNames")
						option(value="enLatinate" selected) Latinate (“Mæmacterion”)
						option(value="enLiteral") Literal (“Maimaktēriōn”)
						option(value="grc") Greek (“Μαιμακτηριῶνος”)
					label(for="conv-monthNames") Month names
				.form-group
					input#conv-shortMonths(type="checkbox" name="shortMonths")
					label(for="conv-shortMonths") Shorten month names?
				.form-group
					select#conv-daySystem(name="daySystem")
						option(value="signed" selected) Traditional (1–20, then 10–1)
						option(value="raw") Boring (1–30)
					label(for="conv-daySystem") Days of the month
				.form-group
					select#conv-numSystem(name="numSystem")
						option(value="greek" selected) Greek (α, β, γ, δ…)
						option(value="arabic") Hindu–Arabic (1, 2, 3, 4…)
					label(for="conv-numSystem") Numeral system
				.form-group.greek-only
					select#conv-numInd(name="numInd")
						option(value="keraia" selected) Keraia (χπδʹ)
						option(value="vinculum") Overline (#[span.overline χπδ])
					label(for="conv-numInd") Indicator
				.form-group.greek-only
					input#conv-capNums(type="checkbox" name="capNums")
					label(for="conv-capNums") Capitalise numerals?
				.form-group.greek-only
					select#conv-stigma(name="stigma")
						option(value="0" selected) Ϝ ϝ
						option(value="1") Ϛ ϛ
						option(value="2") ΣΤ στ
					label(for="conv-stigma") Glyph for 6
				.form-group.greek-only
					select#conv-qoppa(name="qoppa")
						option(value="0" selected) Ϟ ϟ
						option(value="1") Ϙ ϙ
					label(for="conv-qoppa") Glyph for 90
				.form-group
					input#conv-olInd(type="checkbox" name="olInd")
					label(for="conv-olInd") Include era marker? (Ol.)
				.form-group
					input#conv-weekdays(type="checkbox" name="weekdays")
					label(for="conv-weekdays") Include weekday symbols? (♂, ☿, ♃…)
				input(hidden name="lang" value="en")

	p #[b.gregorian Gregorian:] Roman-derived Christian solar calendar now used secularly the world over. Days start at midnight. Months start on arbitrary dates, lasting 28–31 days each depending on the month. Years start on #[span.time 1 January], a few days after the northern winter solstice. A leap day, #[span.time 29 February], is added every four years, except for years which are divisible by 100 but not 400. Epoch a few years after the birth of Jesus of Nazareth; #[span.time Ol. ρϟδʹ.δʹ] in Attic. Numbers here written using Hindu-Arabic numerals.
	p #[b.attic Attic:] Ancient Athenian lunisolar festival calendar now used liturgically by contemporary Hellenic Pagans. Days start at sunset. Months start on new moons, lasting 29–30 days each. On the twenty-first day of the month, dates start counting down from 9 instead of up, here marked with a #[span.time ☾] waning crescent moon. Years start on #[span.time αʹ He­ca­tom­bæon], the first new moon after the northern summer solstice. The month of Po­sei­deon is doubled in years with thirteen new moons. Epoch at first ancient Olympic games; #[span.time 776 #[+sc("BCE")]] in Gregorian. Numbers here written using Greek numerals; years here written as [#[i Olympiad]].[#[i Year]].
	p #[b.holidays Holidays:] This column serves as a liturgical calendar of relevant Greek and Roman festivals. I’ve also included the solstices and equinoxes, as well as the #[span.time #[span.wiccan Wiccan] #[span.wiccan Wheel] #[span.wiccan of] #[span.wiccan the] #[span.wiccan Year]] (for the benefit of any avid syncretists reading), the occasional secular commemoration (such as Bonfire Night), and some #[span.time.christian Christian holidays] (seeing as the continent is 64% Christian, their calendar still holds quite some weight to the daily lives of even the most stridently secular Britons and Dutchfolk). #[span.time.attic Underlined festivals] are reckoned by the Attic calendar and last from sunset to sunset rather than midnight-to-midnight. Festivals marked with an #[span.time asterisk*] have had their precise occurrences lost in the fog of history, so their dates here are the result of some conjecture.
	p All dates given have been calibrated for the north of England. They may be inaccurate for other regions, especially in the southern hemisphere, where the solstices and equinoxes are reversed.
	+calendar(thisYear, true)
	+sn(1)
		p #[span.theonym Hermaphroditos] is a somewhat obscure God in the grand scheme of things; since They lack a “proper” festival day in Their name, i like to use the date i realised i was transgendered as a substitute.
	details#nextYear
		summary Next year…
		+calendar(thisYear + 1, false)
	div.table-container#olympiad-to-years
		table
			thead
				tr: th(colspan="10") Notable olympiad correspondences
				tr
					th Olympiad
					th Years
					th O
					th Y
					th O
					th Y
					th O
					th Y
					th O
					th Y
			tbody
				tr
					td αʹ
					td 776–772 #[+sc("BCE")]
					td ρʹ
					td 380–376 #[+sc("BCE")]
					td σʹ
					td 21–25 #[+sc("CE")]
					td τʹ
					td 421–25
					td υʹ
					td 821–25
				tr
					td φʹ
					td 1221–25
					td χʹ
					td 1621–25
					td χιʹ
					td 1661–65
					td χκʹ
					td 1701–05
					td χλʹ
					td 1741–45
				tr
					td χμʹ
					td 1781–85
					td χνʹ
					td 1821–25
					td χξʹ
					td 1861–65
					td χοʹ
					td 1901–05
					td χπʹ
					td 1941–45
				tr
					td χϟʹ
					td 1981–85
					td χϟαʹ
					td 1985–89
					td χϟβʹ
					td 1989–93
					td χϟγʹ
					td 1993–97
					td χϟδʹ
					td 1997–2001
				tr
					td χϟεʹ
					td 2001–05
					td χϟϝʹ
					td 2005–09
					td χϟζʹ
					td 2009–13
					td χϟηʹ
					td 2013–17
					td χϟθʹ
					td 2017–21
				tr
					td ψʹ
					td 2021–25
					td ψαʹ
					td 2025–29
					td ψβʹ
					td 2029–33
					td ψγʹ
					td 2033–37
					td ψδʹ
					td 2037–41
				tr
					td ψεʹ
					td 2041–45
					td ψϝʹ
					td 2045–49
					td ψζʹ
					td 2049–53
					td ψηʹ
					td 2053–57
					td ψθʹ
					td 2057–61