Osterdatum berechnen
Berechnet für ein beliebiges Jahr zwischen 1583 und 2399, auf welches Datum Ostersonntag und Karfreitag fallen.
Wann ist dieses Jahr eigentlich Ostern? Und wann nächstes Jahr, oder das Jahr darauf? Dieses Script beantwortet euch die Frage für jedes beliebige Jahr: Ihr gebt eine Jahreszahl ein, klickt auf „Berechnen" — und bekommt das Datum von Ostersonntag und Karfreitag angezeigt. Das aktuelle Jahr ist beim Laden der Seite bereits vorausgefüllt, ihr könnt also sofort loslegen.
Dass Ostern jedes Jahr auf ein anderes Datum fällt, hat einen alten Grund: Auf dem Konzil von Nicäa im Jahr 325 wurde festgelegt, dass der Ostersonntag der erste Sonntag nach dem ersten Vollmond des Frühlings ist. Deshalb kann Ostern frühestens auf den 22. März und spätestens auf den 25. April fallen. Weil Mondphasen und Wochentage regelmäßigen Zyklen folgen, lässt sich das Datum rein rechnerisch bestimmen — die bekannteste Rechenvorschrift dafür ist die Osterformel des Mathematikers Carl Friedrich Gauß, auf der auch dieses Script beruht.
Die Jahreszahl muss zwischen 1583 und 2399 liegen. Die untere Grenze kommt vom gregorianischen Kalender, der erst 1582 eingeführt wurde — für frühere Jahre gälte eine andere Rechnung. Nach oben ist die Formel durch zwei Hilfszahlen begrenzt, die im Script jahrhundertweise hinterlegt sind und hier bis zum Jahr 2399 reichen. Bei Eingaben außerhalb dieses Bereichs meldet sich das Script mit einem freundlichen Hinweis.
Passend dazu findet ihr im Archiv einen Kalender mit Uhrzeit und Feiertagen, der die festen Feiertage des Jahres kennt, und das Script An welchem Wochentag wurde ich geboren?, das ebenfalls mit reiner Kalender-Arithmetik arbeitet.
Gültiger Bereich: 1583 bis 2399 (gregorianischer Kalender).
So funktioniert das Script
Das Script hat drei Teile: Es liest die Jahreszahl aus dem Eingabefeld und prüft sie, rechnet dann mit der Gaußschen Osterformel das Datum aus und schreibt das Ergebnis in die Ausgabefläche. Beim Laden der Seite wird das Eingabefeld außerdem mit dem aktuellen Jahr vorbelegt. Alles steckt in einer sofort ausgeführten Funktion, damit keine Variablennamen mit anderen Scripts kollidieren.
const J = parseInt(eingabe.value, 10);
if (isNaN(J)) {
ausgabe.textContent = "Bitte gebt eine Jahreszahl ein.";
return;
}
parseInt(…, 10) macht aus dem eingetippten Text eine ganze Zahl; die 10 legt das Dezimalsystem fest. Steht im Feld keine Zahl, liefert parseInt den Spezialwert NaN („Not a Number"), den isNaN() erkennt — dann erscheint ein Hinweis und return beendet die Funktion. Genauso werden zu kleine und zu große Jahreszahlen abgefangen. Das Original benutzte an dieser Stelle eval() und alert()-Fenster; die moderne Fassung liest die Eingabe sicher ein und schreibt Meldungen direkt in die Ergebnisfläche. Wichtig: Nach jeder Fehlermeldung steht ein return, damit nicht — wie im Alt-Script — trotzdem weitergerechnet wird.
const a = J % 19; // Stellung im 19-jährigen Mondzyklus
const q = Math.floor(J / 4);
Hier beginnt die eigentliche Osterformel. Der Prozent-Operator % liefert den Rest einer Division: J % 19 sagt, an welcher Stelle des 19-jährigen Mondzyklus das Jahr steht — nach 19 Jahren fallen die Mondphasen nämlich wieder (fast) auf dieselben Kalendertage, das wussten schon die alten Griechen. Math.floor(J / 4) rundet ab und zählt grob die Schaltjahre bis zum Jahr J; sie verschieben die Wochentage.
if (J >= 1900 && J < 2100) { M = 204; D = 13; }
Die beiden Hilfszahlen M und D hängen vom Jahrhundert ab, denn der gregorianische Kalender lässt in manchen Jahrhunderten ein Schaltjahr ausfallen. Das Script hält sie in einer Tabelle aus if-Abfragen bereit — von 1583 bis 2399. Für alle Jahre zwischen 1900 und 2099 gilt zum Beispiel das Paar 204 und 13. Daher kommt auch die Bereichsgrenze: Für Jahre ab 2400 stehen schlicht keine Werte mehr in der Tabelle.
let b = (M - 11 * a) % 30; // Abstand des Frühlingsvollmonds
if (b === 28) b = 27; // Ausnahmeregeln der Osterformel
if (b === 29) b = 28;
const c = (J + q + b - D) % 7; // Korrektur bis zum nächsten Sonntag
b beschreibt, wie viele Tage der Frühlingsvollmond hinter dem 21. März liegt. Die zwei kleinen Korrekturen danach sind historische Ausnahmeregeln der Osterformel — sie verhindern unter anderem, dass Ostern hinter den 25. April rutscht. c rechnet anschließend über die Wochentagsarithmetik (wieder mit Rest, diesmal % 7) aus, wie viele Tage es vom Vollmond bis zum nächsten Sonntag sind.
let odat = 28 + b - c; // Ostersonntag, gezählt ab Ende März
if (odat <= 31) {
ostersonntag = odat + ". März";
karfreitag = (odat - 2) + ". März";
}
odat ist das fertige Osterdatum, gezählt als März-Tag: Ein Wert bis 31 bedeutet ein Datum im März, alles darüber wird durch Abziehen von 31 in den April umgerechnet. Der Karfreitag liegt immer zwei Tage vor dem Ostersonntag — spannend wird es nur am Monatsübergang: Fällt Ostern auf den 1. oder 2. April, liegt der Karfreitag noch im März (am 30. bzw. 31.). Genau diese beiden Sonderfälle behandelt das Script einzeln, bevor der Normalfall greift.
eingabe.value = new Date().getFullYear();
document.getElementById("oster-berechnen").addEventListener("click", berechnen);
Zum Schluss wird das Eingabefeld mit dem aktuellen Jahr gefüllt — new Date().getFullYear() liefert die vierstellige Jahreszahl — und die Funktion berechnen() per addEventListener mit dem Knopf verbunden. Das Script steht dafür unter dem Formular, damit Feld und Knopf schon existieren, wenn es läuft. Das Original erledigte die Vorbelegung noch über window.onload und das veraltete getYear().
Zum Anpassen: Die Ausgabetexte („Ostersonntag", „Karfreitag") stehen gesammelt am Ende der Funktion — dort könnt ihr z. B. auch den Ostermontag ergänzen (ein Tag nach dem Ostersonntag, mit denselben Monatsübergangs-Fällen). Wer beim Laden der Seite gleich ein Ergebnis sehen möchte, ruft in der letzten Zeile einfach einmal berechnen(); auf.
Script für die eigene Homepage
Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.
Mehr aus der Kategorie Datum & Uhrzeit
-
An welchem Wochentag wurde ich geboren?
-
Analoge Uhr
-
Analoge Uhr mit römischen Ziffern
-
Arbeitstage berechnen
-
Chinesisches Tierkreiszeichen
-
Digitaluhr
-
Jahreszeit
-
Kalender
-
Kalender mit Uhrzeit und Feiertagen
-
Kalenderwoche berechnen
-
Mondphase berechnen
-
Schaltjahr prüfen
-
Sternzeichen ermitteln
-
Tage bis zum Jahr 3000
-
Tage zwischen zwei Daten
-
Uhrzeit in Worten
-
Unix-Zeitstempel wandeln
-
Weltzeituhr
-
Zeitumstellung