<!DOCTYPE html> <!-- https://gitlab.com/zlax/solarwheeloftheyear --> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <!-- ; ;= .=; .X ... ;;. ; .; ;.= == =. = . ; . X=. ;. = = ;. + .;;; .. .; .. . +. ;..; . = = X; .; .= = .; = =. . =;; ;. .+. = = ; . .= ; ; = =. = X = ; ;; .;.; ;. ;. = .. ; = ;; = = ; =. = ; ;. = = ; + .= = =. = ;; ; . .. ; ; .; = =. = = .; . = .; ; = = .= = ; ; .; .. ;= ;. = ;. ; . .= ; .; = ;. = .= .= .; .. ; = .+ ; ; = .; ; ;; .. ;. .; .X ;. ; ;. =. = ;. .; ;. .X ;; ; . =. .; .. .= =. + = = .; + +. .. .; ; . ; + ;. ; .= = .+. = .; = ; ; ; = + ;. . ;; + .; X .; ; = = .X ;. = ;... .. .+ ; = ; X . .+ =. X ; .. = + . .. ; ; + .; ;. ; .; .; ; .; ; X ; ; ; .; ; .. .. ... ;. .; + .;; . . . ; =. .;; ; ;; ; ;; ; ==. ;=; = = ; ;;.;=. ;. ;; = = ;. =;. ;= X ;. .; .+. =. ; .=. ;. ;.; .=. ;= ;.. . ..; = .. =+ = .;; +. ;= ..= = ... = ; .=; ; .+. ;. ;= += .. .=. =. ;. =; ; X. + ;= =; = .;. .; ; .= ; ;+ + ;. ;+ ;. =. = = .. + ; = ; ;. ;= ; = = ;; ; =.; = .; = .; .. = .; ; ;.; ; .X = + =; .; ; =. .. ;=. .= + ; .. .+ ; ;. = =X =. ; .=; + . .= ;. ;; . X; ;. .; ;;. ; =. ;+ = ; ; ; ; =. .+ = ==;;; = ;.=. .; = ;;;;; + =. ;;+=; ;;;..=. .. == . .. = .;+M##########M;;. + .. .;;X=. .=; ;. ;=.; ; .= ;X###M++++==++++M##M+;.==. ;. .= ..=.. ;= = ..=. ; . =M##X=;...........;==+M#M##= = .= . .;. ; .;. ; =##M+.................;M#####+ .= .;= ;= ; .;.. ;M##+.................=X########+ .=; ; .=. ; .+= =M#M;.................X###########M. .X.. .; ; =+ X#M=.................+#############M#= =X. =; ; .+. X#M;................=M##############=M#; =; .;. = == M#M................;X################X;MM; .+. .= =. . X#M................+###M#=############X..M#; .= .= .= +#M................X###MM#+#############..;M#. .= =; ;##;...............+####=#M=#############...;#M ;; .= M#=................X###.;#==#############;...;#+ ;. =; +#X.................###X X#=X#############.....X#. =. .== .MM=................X###M.## X############M.....;#+ .; .;. M#X..........;=;.;X######X#X X############X......X#. ;. .. ;;;;=+X;;====.. .##........;XM###M##########X X############+......;#X ;= ...=;;;;..... ;..=;; .=+. X#X......;X##################.X############........M#. ;;=; ;==;.. ..;.+=;.;; ;= ;. .##;.....XM###################XM###########=........;#= .++.; ;;.;=+=;. .+;. =#M....=M############;+#M#################X..........MX .;X.. ... .;+X= ..=. X#+..;M##############X;#XX###############X=..........=#. .= ;;; ;=. .M#.;M################M.X#==#############X;X..........;#= .+.. = .##X###################;;#X.;XM########M=.=+...........MX .;; .=. .#####M#M##############=.X#+...=X##XXX=...==...........X#. .;. ;.;. .=X;. M####+MM+##############X.;#MX+...;X;......=+...........X#; .=. ==.. X####M;#=X##############X..;++XX...X;......;+.......+...X#; ..X .=.;; =#####=;#.M##############+......=.;+=........X=.....+=...X#; ;.; .; .;;;;;;;;;;;+=; .M####.+M ###############=........X=.......;M#M+=;=X=....X#; ==. ..==. M###+X= ##############M........=M......;+M+#;;+==......X#; ..;=+ ..;. +#####= ##############X.......;X+....;+#M=+#;..........X#; ;;.;==;;. ;==. ;.; +#####X ##############;..XX+=+M+...;X##M=;+M...........X#; ...=; .=. =######;#############MM+X;;XMX...=M###+=;;MM...........X#; .=.. ;.; .#XX###M############+.+=........=###M+;;;=#+...........XM ;;. .;. .##.=##############+.........=XX###M=;;;;+#+...........MX ..;. ;. M#;.=M##########M=........;X#####X=;;;;;M#=..........=#= .; ;; =#+...+X######M+.........;M####M+;;;;;;+##...........+#. ..; =. ;#M.....;=======........+M###X+;;;;;;;=M#M...........MM ..== ;= .;+ M#=.........=;=X=....;M##M==;;;;;;;;=MM#X..........;#= .=+. ... .... .=. ;== =#X.............+X.;+#MX=;;;;;;;;;;+#= M+..........M#. ..=+==;=++; .+ =X= M#;.............XXX+=;;;;;;;;;;;=X#= =#..........;#X == .;. ;; .. ;;;= =#X.............=#M+=;;;;;;;;;=+MX. =#;..........X#. ;X;. ..= =. .;===;.==;; .;;. .= M#;............;X+M#XX+=;;=+X#X= +M=..........;#X =;== ;=.; =. ;X=..;;;;;;;;;;. ;; ;#M............;=..=M##MMMM#+. ;MM;...........MM. .==.;+; .=+; ; +=.;. ;. X#=...........+;...;=M####; .+MX;...........=#+ .=. .;;. ..;; ;;; . ;; .MM;.........;M.......;=XMM+MMX;........=...;MX .= =. ;MM;......;+M;...........;==...........=..;M# =; ;. ;#M;....++=..........................;;..X#; .= .= =#M.................................X.;M#= ; ;. .; .= =MM;..............................===##= ;= ;. ;; =; ;#M=.............................X+##; =. .. .. = ;M#X;................+;.......;M##M; ;; .. ;; ;; +##X;...............++=...=X##M= =. .. ;. .+. ;X##X=..............;=+MM###+. =; .; = ;+. .XM#MX;;;.........;;XM#MX. ;.=. .; ; ..;+ +X####M+====+MM###X= ; ;;; ;. ;. ... ; +. .;;XX######MX;;. . ; ..=. ; ;. ;. ; =. ...... = ;; == = .= ..=. ; .+ .= ;. =;; .. .. ;; ; ; X. .; ; ..; ;. +. . ;=+ ; ++ ;; . + ; ;. .;;;; ; ..= . . += . =. .. ;;=;=. ;; ;. . ;. .; ; .;; ; .; ; . ; ; ; X + ; ;;= = .; .. = .; ; .= .= ; ; = =. .. .= ; ;. ;; ; == .; + ;. . .. ; ==. = .; = ..; =; X + ; .= . ;= ; . . ; ; =; = =; ; =. = = .. .;. ; ..; .; =; .; . .= ; ; .; ; . + ;.; . ;. ; =. . .. . ; = + . . .; .; ; ... ; ; .; ; ; ; . . . . . .. ;; .. .. = .. . ; . . ; ;; = ; ;. = ;.= = ;. ; = . ; . .; . ;; = .+. ; ;. .. + ; . ;. . ;; . . = ;. ; ; ; . = ; = ;.= ; ;. .. . ; ;. ;. ; ; .=. ; .. ; + ; .. . .; .+ ; ; .; ; ; ; . . + = = ; .; ; ;. ; . ; . ; = . ; ; . . .; =. ; = . = ; ; ;. . = .. ; ; ; = ; ; ; = ; .; + + =. . ; + ; ; .. ;; ; . . .. ; X .==. . . ; ; = ; .+. . = ; = ; . + = . + .; .. ; ; . ; . = . ; ; ; ; ; ; = ;.. . ; .. .. ;.= . ; . =.. =. . ;; .; ;.; = .; + .; .. +X = ;= + . .; . . =; . --> <link rel="icon" href="favicon.ico" type="image/x-icon"><link rel="shortcut icon" href="favicon.ico" type="image/x-icon"> <link rel="stylesheet" type="text/css" href="anthrstlsht.css"> <script type="text/javascript" src="dtime.js"></script> <script type="text/javascript" src="vernal_equinox.js"></script> <script type="text/javascript" src="autumnal_equinox.js"></script> <script type="text/javascript" src="southern_solstice.js"></script> <script type="text/javascript" src="northern_solstice.js"></script> <title>solar wheel of the year</title> </head> <body> <br><p align="center"><input type="button" onclick="document.getElementById('soltable').innerHTML = makeTable(0, 'erisian');" value="Erisian time"/></p> <p align="center"><input type="button" onclick="document.getElementById('soltable').innerHTML = makeTable(0, 'auto');" value="Christian time"/>:<br> <div align = "center" id="utcbuttons"></div></p> <script type="text/javascript"> const utcs = { "UTC-11" : "-11", "UTC-10" : "-10", "UTC-9" : "-9", "UTC-8" : "-8", "UTC-7" : "-7", "UTC-6" : "-6", "UTC-5" : "-5", "UTC-4" : "-4", "UTC-3:30" : "-3.5", "UTC-3" : "-3", "UTC-0" : "0", "UTC+1" : "1", "UTC+2" : "2", "UTC+3" : "3", "UTC+3:30" : "3.5", "UTC+5" : "5", "UTC+5:30" : "5.5", "UTC+6" : "6", "UTC+6:30" : "6.5", "UTC+7" : "7", "UTC+8" : "8", "UTC+9" : "9", "UTC+9:30" : "9.5", "UTC+10" : "10", "UTC+11" : "11" }; var buttons = ""; var counter = 0; var nextholiday = false; var currentholiday = false; for (var u in utcs) { counter += 1; buttons += '<input type="button" onclick="document.getElementById(' + "'soltable'" + ').innerHTML = makeTable('; buttons += utcs[u] + ", '" + u + "');" + '" value="' + u + '"/>' if (counter % 5 == 0) buttons += "<br>"; } document.getElementById("utcbuttons").innerHTML = buttons; </script> <div align = "center" id="soltable"></div><br><div align = "center" id="oneyearrow"></div> <script type="text/javascript"> function formatedDate(datein, timeoutput, UTC) { if (timeoutput == 'erisian') var dateout = dtime(datein, 'timeofyold'); else { var timein = new Date ( datein.getTime() + ( UTC * 60 * 60 * 1000 )); var dateout = ("0" + ( timein.getUTCDate())).slice(-2) + "." + ("0" + ( timein.getUTCMonth() + 1)).slice(-2) + " "; dateout += ("0" + timein.getUTCHours()).slice(-2) + ":" + ("0" + timein.getUTCMinutes()).slice(-2) + ":" + ("0" + timein.getUTCSeconds()).slice(-2); } return dateout; } function oneyearChange(value) { if (timeout == "erisian") outyear = value - 1166; else outyear = value; document.getElementById("oneyearrow").innerHTML = makeOneYearRow(); } function makeOneYearRow() { var fullrow = "<table><tr>"; fullrow += tableRow(outyear, timeout, utcoff, true); fullrow += "</tr></table>"; return fullrow; } function tableRow(cy, timeoutput, UTC, oneyearinp = false) { var stringout = "<td>"; if (oneyearinp) { if (timeoutput == 'erisian') { cury = cy + 1166; miny = 1583 + 1166; maxy = 2999 + 1583; } else { cury = cy; miny = 1583; maxy = 2999; } stringout += '<input type="number" name="oneyearinput" value="' + cury + '" min="' + miny; stringout += '" max="' + maxy + '" step="1" size="5" onchange="oneyearChange(this.value)">'; } else { if (timeoutput == 'erisian') stringout += cy + 1166; else stringout += cy; } var Imbolc = new Date(ss[cy-1].getTime() + ((ve[cy].getTime() - ss[cy-1].getTime()) / 2)); stringout += '<td class="even im">' + formatedDate(Imbolc, timeoutput, UTC) + "</td>"; stringout += '<td class="os">' + formatedDate(ve[cy], timeoutput, UTC) + "</td>"; var Beltane = new Date(ve[cy].getTime() + ((ns[cy].getTime() - ve[cy].getTime()) / 2)); stringout += '<td class="even be">' + formatedDate(Beltane, timeoutput, UTC) + "</td>"; stringout += '<td class="ku">' + formatedDate(ns[cy], timeoutput, UTC) + "</td>"; var Lughnasadh = new Date(ns[cy].getTime() + ((ae[cy].getTime() - ns[cy].getTime()) / 2)); stringout += '<td class="even lu">' + formatedDate(Lughnasadh, timeoutput, UTC) + "</td>"; stringout += '<td class="ma">' + formatedDate(ae[cy], timeoutput, UTC) + "</td>"; var Samhain = new Date(ae[cy].getTime() + ((ss[cy].getTime() - ae[cy].getTime()) / 2)); stringout += '<td class="even sa">' + formatedDate(Samhain, timeoutput, UTC) + "</td>"; stringout += '<td class="yu">' + formatedDate(ss[cy], timeoutput, UTC) + "</td>"; if (cy == now.getFullYear()) { var wheeldaystime = [ ss[cy-1].getTime(), Imbolc.getTime(), ve[cy].getTime(), Beltane.getTime(), ns[cy].getTime(), Lughnasadh.getTime(), ae[cy].getTime(), Samhain.getTime(), ss[cy].getTime(), ve[cy+1].getTime()] var wheeldays = [ "prev", "im", "os", "be", "ku", "lu", "ma", "sa", "yu", "next" ] Number.prototype.isBetween = function (a, b) { return a <= this && this <= b; }; for (let i = 1; i < 10; i++) { if ((Date.now()).isBetween(wheeldaystime[i-1], wheeldaystime[i])) nextholiday = i; } if ((wheeldaystime[nextholiday] - (Date.now())) < 86400000) currentholiday = wheeldays[nextholiday]; if (((Date.now()) - wheeldaystime[nextholiday-1]) < 43200000) currentholiday = wheeldays[nextholiday-1]; nextholiday = wheeldays[nextholiday]; } return stringout; } function makeTable(UTC, timeoutput) { if (timeoutput == 'auto') { UTC = -(now.getTimezoneOffset()/60); Object.keys(utcs).forEach(key => { if (UTC == utcs[key]) timeoutput = key; }) } utcoff = UTC; timeout = timeoutput; var fulltable = "<table><caption>"; fulltable += 'Accurate (according to <a href="https://www.imcce.fr">IMCCE</a>) astronomical '; fulltable += '<a href="https://en.wikipedia.org/wiki/Wheel_of_the_Year">Wheel of the Year</a> - '; if (timeoutput == 'erisian') { fulltable += '<a href="https://discordia.fandom.com/wiki/Erisian_Time">Erisian time</a></br>'; window.location.hash = ""; } else { fulltable += '<b>' + timeoutput + '</b> (<a href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time">Coordinated Universal Time</a>)<br>'; window.location.hash = "#" + timeoutput; } fulltable += '</caption><tr><th>'; if (timeoutput == 'erisian') fulltable += 'YOLD'; else fulltable += 'Gregorian Year'; fulltable += '</th><th><a href="https://en.wikipedia.org/wiki/Wheel_of_the_Year#Imbolc_(Candlemas)">Imbolc</a></th><th><a'; fulltable += ' href="https://en.wikipedia.org/wiki/Wheel_of_the_Year#Spring_Equinox_(Ostara)">Ostara</a></th><th>'; fulltable += '<a href="https://en.wikipedia.org/wiki/Wheel_of_the_Year#Beltane_(May_Eve)">Beltane</a></th><th><a href="https://en.wikipedia.org/wiki/'; fulltable += 'Wheel_of_the_Year#Summer_Solstice_(Litha)">Kupala</a></th><th><a href="https://en.wikipedia.org/wiki/'; fulltable += 'Wheel_of_the_Year#Lughnasadh_(Lammas)">Lunasa</a></th><th><a href="https://en.wikipedia.org/wiki/'; fulltable += 'Wheel_of_the_Year#Autumn_Equinox_(Mabon)">Mabon</a></th><th><a href="https://en.wikipedia.org/wiki/Wheel_of_the_Year#Samhain">'; fulltable += 'Samhain</a></th><th><a href="https://en.wikipedia.org/wiki/Wheel_of_the_Year#Winter_Solstice_(Yule)">Yule</a></th></tr>'; if (timeoutput == 'erisian') UTC = 0; for (var i = 1; i <= 15; i++) { var currentyear = (now.getFullYear() - 8 + i); if (currentyear == now.getFullYear()) fulltable += '<tr class = "currentyear">'; else if (currentyear == (now.getFullYear() + 1)) fulltable += '<tr class = "odd nextyear">'; else if (i % 2 == 0 ) fulltable += '<tr class = "even">'; else fulltable += '<tr class = "odd">' fulltable += tableRow(currentyear, timeoutput, UTC) + "</tr>"; } fulltable += "</table>"; document.getElementById("oneyearrow").innerHTML = makeOneYearRow(); return fulltable; } var now = new Date(); var utcoff = 0; var timeout = "erisian"; if (window.location.hash.slice(0,4) == "#UTC") { if (utcs[window.location.hash.slice(1,9)]) { utcoff = utcs[window.location.hash.slice(1,9)] timeout = window.location.hash.slice(1,9); } } else if (window.location.hash.slice(0,5) == "#auto") timeout = "auto"; var outyear = (now.getFullYear() - 100); var defaultTable = makeTable(utcoff, timeout); document.getElementById("soltable").innerHTML = defaultTable; </script> <br><p align="center"><font size="6">▼</font></a> <br><a href="https://en.wikipedia.org/wiki/Wheel_of_the_Year"><img id="wheel" src="0.5.0_octosol.png" alt="Octosol by DougInAMug"></a></p> <script type="text/javascript"> if (nextholiday == "next") var nextselector = ".nextyear>." + nextholiday; else var nextselector = ".currentyear>." + nextholiday; if (currentholiday) var curselector = ".currentyear>." + currentholiday; document.querySelector(nextselector).style.color = "yellow"; document.querySelector(curselector).style.color = "red"; const dayOfYear = date => Math.floor((date - new Date(date.getFullYear(), 0, 0)) / (1000 * 60 * 60 * 24)); var daynumber = dayOfYear(new Date()); var degree = Math.round((360 / 365) * (daynumber + 10)); var rotatestring = "rotate(" + degree + "deg)" document.getElementById("wheel").style.transform = rotatestring; </script> <br><p align="center"><a href="https://gitlab.com/zlax/solarwheeloftheyear">source code</a></p> </body> </html>