Das Konzil von Nizäa hat 325 n. Chr. festgelegt, daß der Ostersonntag
auf den ersten Sonntag nach dem Frühlingsvollmond fällt. Astronomisch
wartet man zunächst auf die Tagundnachtgleiche des Frühjahres,
wartet dann, bis der Mond in Opposition zur Sonne steht und wartet dann auf
den ersten Sonntag, der dann als Ostersonntag bezeichnet wird.
Das folgende JavaScript berechnet die Lage der zugehörigen Feiertage.
Syntax
OsterDatum = OsterSonntag(Jahr, TagesDifferenz)
Jahr
Vierstellige Jahreszahl.
TagesDifferenz
Abstand in Tagen zum Osterfest gem. rechter Tabelle. Wird nichts oder
der Wert 0 übergeben, berechnet die Funktion den Ostersonntag selbst.
OsterDatum
Rückgabewert. Datum des beweglichen Feiertages. Die Art der
Datumsanzeige ist vom Browser abhängig.
Anmerkungen
Das Format von OsterDatum ist vom Browser abhängig.
Das Datum muß im Format der lokalen Zeitzone übergeben werden.
Wird kein Datum (null oder "") eingegeben, verwendet das Skript das aktuelle
Jahr aus dem Datum der Systemuhr als Jahr, um den Ostersonntag zu berechnen.
Ist das Jahr nicht aus dem Zeitraum 1970-2199, so wird der Hinweis
"JavaScript kann nur zwischen 1970...2099 rechnen"
zurückgegeben. Dieser Bereich ist durch die Zeitdarstellung in JavaScript bedingt.
Vom Osterfest hängen eine Reihe weiterer Feiertage ab. Die Tabelle rechts
zeigt, wieviele Tage vom Datum des Ostersonntag zu addieren bzw.
subtrahieren sind, um das Datum anderer beweglicher Feiertage zu berechnen.
Die Formeln hat Carl Friedrich Gauß (1777-1855) entwickelt.
Tag
Abstand
Weiberfastnacht
-52
Rosenmontag
-48
Fastnachtsdienstag
-47
Aschermittwoch
-46
Gründonnerstag
-3
Karfreitag
-2
Ostersonntag
0
Ostermontag
+1
Christi Himmelfahrt
+39
Pfingstsonntag
+49
Pfingstmontag
+50
Fronleichnam
+60
Funktions-Demo
Code
<SCRIPT LANGUAGE="JavaScript1.1" TYPE="text/javascript"><!--
function OsterSonntag(Jahr, TagesDifferenz)
{ // Erstellt von Ralf Pfeifer (www.arstechnica.de)
// Falls kein Datum angegeben, aktuelles Jahr verwenden.
if ((Jahr == "") || (Jahr == null)) { Jahr = new Date().getYear() }
// Falls ausserhalb des gültigen Datumsbereichs, kein Ergebnis zurueckgeben
if ((Jahr < 1970) || (2099 < Jahr)) { return "Datum muss zwischen 1970 und 2099 liegen"; }
// Falls keine TagesDifferenz angegeben, TadgesDifferenz auf 0 setzen.
if ((TagesDifferenz == "") || (TagesDifferenz == null)) { TagesDifferenz = 0; }
var a = Jahr % 19;
var d = (19 * a + 24) % 30;
var Tag = d + (2 * (Jahr % 4) + 4 * (Jahr % 7) + 6 * d + 5) % 7;
if ((Tag == 35) || ((Tag == 34) && (d == 28) && (a > 10))) { Tag -= 7; }
var OsterDatum = new Date(Jahr, 2, 22)
// 86400000 = 24 h * 60 min * 60 s * 1000 ms
// Die Zahl 86400000 nicht ausklammern, sonst gibt's Probleme bei der Typumwandlung !!
OsterDatum.setTime(OsterDatum.getTime() + 86400000 * TagesDifferenz + 86400000 * Tag)
// Uhrzeit aus dem Datum entfernen
OsterDatum = OsterDatum.toLocaleString()
OsterDatum = OsterDatum.substring(0, OsterDatum.length - 9);
return OsterDatum;
} // -->