2. Tipps und Tricks (zurück zur Startseite ) zurück zu Datum berechnen
Erweiterung Datum berechnen und Informationen ( Stand: 12.1.2019)
Zusammenfassung: Formeln zu Datum und Feiertagen mit Osterkennzahl
Download Formelsammlung Formeln zu Feiertagen.pdf
Schaltjahr und Anzahl der Schaltjahre berechnen
Tag-Nummer im Jahr berechnen, Datumsdifferenz, Abstand bewegliche Feiertage,
Tage_im_Monat Monatslänge, Anzahl Tage vorhergehender Monate, Jahrestag am Monatsende
Datum_aus_Tagnummer des Jahres bilden,
Wochen-Nummer im Jahr errechnen, richtige Wochennummer am Anfang und Ende des Jahres
Wochennummer mit Formel berechnen neue einfache Formeln
Datum einer Kalenderwoche Datum aus Kalenderwoche und Wochentag bestimmen
Wochentag eines Datums berechnen allgemein im Julianischen und Gregorianischen Kalender
Eine einfache Berechnung des Wochentages 1901 bis 2199 siehe Datum berechnen
Umrechnen vom Julianischen zum Gregorianischen Datum
Osterdatum_berechnen einfache Osterformeln, Osteralgorithmus für alle Jahrhunderte
Ostern berechnen mit Osterkennzahl E und Osterkennziffer,
Frühester und spätester Ostertermin errechnen
Osterdatum_Julianischer_Kalender , griechisch orthodox und gregorianischer Kalender
Bewegliche Feiertage und Wochentage mit Osterkennzahl oder Ostersonntag berechnen
Bewegliche_Feiertage berechnen Rosenmontag, Karfreitag, Himmelfahrt (Vatertag), Pfingsten, Fronleichnam
Auch_mit_Osterdatum_berechnen Buß- und Bettag , Muttertag , Datum Sommerzeit , Datum Advent, usw.
Wochentag_mit_Osterkennzahl von Weihnachten und Silvester berechnen
Test meiner Osterformeln mit Gauß / Dr. Lichtenberg, J.M. Oudin, Anonym (Butcher), O'Beirne,
Hutchin, Clavius, Piper (1841), Zeller (Fehler z.B. 2011 korrigiert), usw. siehe Osterformeln_Test.pdf
Ostersonntag in Tabellenkalkulation (z.B. Excel) berechnen
Vollmond berechnen, Datum, Wochentag und Tagnummer, einfache Formeln zu Vollmonden
Feiertage mit Jahreszahl berechnen Jahreskennziffer (statt mit Osterkennzahl)
Berechnung Muttertag, Advent, Datum Sommerzeit Winterzeit, Buß- und Bettag, Totensonntag, Volkstrauertag
Schweizer_Feiertage mit Jahreszahl oder Osterkennzahl berechnen
Allgemeine Berechnung Datum für weitere_Feiertage und besondere Tage
Weiter zu Datum berechnen für Steuerungen Berechnungen mit Basic z.B. für Steuerungsgeräte z.B. c-control
Wochentag, Jahrestag, Wochennummer (Kalenderwoche)
Osterdatum berechnen für Steuerungsgeräte mit Basic
Bewegliche Feiertage Rosenmontag, Karfreitag, Himmelfahrt, Pfingsten, Fronleichnam,
Muttertag, Advent, Datum Sommerzeit, Buß- und Bettag mit Osterdatum berechnen
Steuern mit Feiertagsbit für Heizung, Rollladen und Kirchenglocken
Programme für feste und bewegliche Feiertage
1) Rechnen mit Ganzzahl und Rest
Achtung. Bei den folgenden Berechnungen müssen Ganzzahl-Division (Kommastellen fallen weg) und Divisions-Rest (MOD) angewendet werden.
Beispiel: Ganzzahl = 11 / 7 = 1 Rest = 11 MOD 7 = 4
Zusätzliche Rechenregeln für Ganzzahl-Division und Divisions-Rest wurden bei den Formeln angewendet.
Kürzen: Vielfaches kann gekürzt werden. (x + 36) MOD 7 = (x + 35 +1) MOD 7 = (x + 1) MOD 7, weil 35 MOD 7 = 0 ist.
Faktoren dürfen nicht vertauscht werden, denn die Reihenfolge des Rechnens von links nach rechts würde zu einem anderen Ergebnis führen.
Ganzzahl 2 / 3 * 8 = 0 *8 = 0. Dagegen ergibt 8 * 2 / 3 = 16 / 3 = 5.
Gemeinsamer Nenner (Ziffer):
Bei Addition Y = 9 + 9 / 4 = 11 und mit gemeinsamen Nenner ist das Ergebnis gleich: Y = 5 * 9 / 4 = 11
Bei Subtraktion Y = 9 – 9 / 4 = 7 ist bei Ganzzahl-Division nicht gleich. Y = 3 * 9 / 4 = 6 , weil der Rest von A / 4 auch abgezogen wurde.
Man kann den Rest addieren: Y = 3 * 9 / 4 + 9 MOD 4 = 7. Einfacher ist Nenner –1 im Zähler zu addieren: Y = (3 * 9 + 3) / 4 = 7
Negative Zahl vermeiden, weil die Berechnung einfacher wird und auch weil einige Programme bei Modulo fehlerhaft rechnen.
Im folgenden Beispiel wird bei x = 0 die Zahl negativ. Durch Addition (hier 7 wegen MOD 7) erkennt man auch direkt das Ergebnis (hier =6).
(x –1) MOD 7 = (x –1 +7) MOD 7 = (x +6) MOD 7
Kann beispielsweise x = – 8 werden, dann beträgt der niedrigste Wert –9 , dann wird 14 addiert. Ein Vielfaches von 7 bei Rechnen mit MOD 7
Allgemein gilt : –a MOD y = (V *y – a) MOD y , zur Vermeidung negativer Ergebnisse z.B. bei a < 2* y gilt –a MOD 30 = (60 – a) MOD 30
Mit Gauß Formel – E MOD 7 = 6 * E MOD 7 kann umgeformt werden = (7 – E) MOD 7 = 7 –1 – (E –1 +7) MOD 7 = 6 – (E + 6) MOD 7
Mit y = 6 – ( E + x ) MOD 7 = (6 * E + x ) MOD 7 = (6 * E + 6 – x ) MOD 7 kann man auch umformen zum Beispiel bei Osterkennzahl E
WoTag = 6 – ( E + 6 ) MOD 7 WoTag = 6 * E MOD 7 ' alternative Formeln für Wochentag 1. Weihnachtstag 25.12.
Allgemein gilt : –z * x MOD y = (y – z) * x MOD y , zur Vermeidung negativer Ergebnisse z.B. (a – 1*x) MOD 30 = (a + 29*x) MOD 30
2) Schaltjahre berechnen
(1) Schaltjahr erkennen
SJ = 1 / (1+Jahr MOD 4) –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
Erläuterung: 1 / (1+Jahr MOD 4) ist = 1, wenn Jahr MOD 4 = 0 (also Schaltjahr) ist. Gültig für 1901 bis 2099
Je nach Bedarf kann die Jahrhundertregel –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) weggelassen werden. Sie ist erst wieder für das Jahr 2100 bzw. 2400 notwendig.
(2) Zweite Möglichkeit Schaltjahr bestimmen (z.B. für Tabellenkalkulation)
SJ = (Jahr +3) MOD 4 / 3 – (Jahr +99) MOD 100 / 99 + (Jahr +399) MOD 400 / 399 ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
Erläuterung: Jahr MOD 4 rotiert 0, 1, 2, 3 von Jahr zu Jahr. Der Summand +3 sorgt dafür, dass nur im Schaltjahr SJ = 3 / 3 = 1 wird.
(3) Dritte Möglichkeit Schaltjahr bestimmen
SJ = Jahr / 4 – Jahr / 100 + Jahr / 400 – (Jahr –1) / 4 + (Jahr –1) / 100 – (Jahr –1) / 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
Erläuterung: Von der Anzahl der Schaltjahre beginnend beim Jahr 1 bis zum aktuellen Jahr wird die Anzahl bis zum Vorjahr subtrahiert.
(4) Schaltjahr mit Boolescher Algebra bestimmen (bei Systemen mit Ergebnis –1 statt 1 muss –SJ verwendet werden)
SJ = ((Jahr MOD 4 = 0) AND (Jahr MOD 100 >< 0)) OR (Jahr MOD 400 = 0)
(5) Schaltjahr bestimmen einfache Lösung (bei Systemen mit Ergebnis –1 statt 1 muss –SJ verwendet werden)
SJ = (Jahr MOD 4 = 0) – (Jahr MOD 100 = 0) + (Jahr MOD 400 = 0)
3) Tag-Nummer im Jahr berechnen, Jahrestag
Das Datum bestehend aus Tag und Monat wird in Tagnummer im Jahr umgewandelt.
(1) Tagnummer mit Formel berechnen (alle Jahrhunderte) aus Tag, Monat und Jahr
TagNr = Tag + 31 * Monat –31 ' Tagnummer im Jahr für Januar und Februar
TagNr = Tag + Monat / 2 *31 ' alternativ Tagnummer im Jahr für Januar und Februar
TagNr = Tag + (153 * Monat –162) / 5 + SJ ' Tagnummer im Jahr für März bis Dezember
TagNr = Tag + 489 * Monat / 16 – 32 + SJ ' alternativ für März bis Dezember
Zwischen den beiden Formeln kann man umschalten mit
if Monat < 3 then TagNr = Tag + 31 * Monat –31 else TagNr = Tag + 489 * Monat / 16 – 32 + SJ
(2) Eine Formel für alle Monate zur Berechnung der Tagnummer
TagNr = Tag + 489 * Monat / 16 – 30 + (7 + Monat) / 10 *(SJ – 2)
Wegen des Wertes für Januar 489 * 1 / 16 = 30 werden 30 Tage abgezogen.
Der Term 489 * Monat /16 sorgt für die wechselnden Monatslängen 31 und 30 Tage ab März.
Der Term (7+Monat) / 10 beträgt im Januar und Februar = 0 und ab März = 1. (Alternative Monat > 2 ).
Damit wird ab März das Schaltjahr berücksichtigt und die Korrektur wegen Februar –2 Tage eingeschaltet.
Ansonsten entspricht die Formel der Geraden y = ax + b mit y = b = 32 bei x = 0 und Steilheit der Geraden a = 489 / 16 .
TagNr = Tag + 489 * Monat SHR 4 – (13 + Monat) SHR 4 *(2 – SJ) – 30
TagNr = Tag + 489 * Monat SHR 4 – (Monat >2) *(2 – SJ) – 30 kürzeste Formel
Die gleiche Formel alternativ mit Befehl Schiebe rechts 4 Bit statt / 16 bzw. (Monat >2) mit Ergebnis 0 und +1
(3) Weitere Formel
TagNr = Tag + (153 * Monat –162) / 5 + (7 + Monat) / 10 *SJ + 2 / Monat *3 – 1 / Monat *5 ' Tagnummer im Jahr für Januar bis Dezember
Der Term (7+Monat) / 10 beträgt im Januar und Februar = 0 und ab März = 1. Damit wird ab März die Korrektur +1 für Schaltjahr eingeschaltet.
Für Februar wird eine Korrektur +3 eingeschaltet mit dem Term 2 / Monat, weil die Grundformel nur 28 Tage ergibt. Dies ergibt aber +6 für Januar.
Für Januar ist nur eine Ergänzung +1 notwendig. Deshalb wird mit Term 1 / Monat *5 korrigiert (6 –5).
(4) Weitere Formel
TagNr = Tag + (153 * Monat –162) / 5 + SJ + 3 / (Monat +1) *(Monat*2 –1– SJ) ' Tagnummer im Jahr für Januar bis Dezember
Der Tag für Schaltjahr wird für alle Monate addiert, jedoch bei der Korrektur für Januar und Februar wieder abgezogen.
Für Januar und Februar ist eine Ergänzung notwendig. Hierfür dient der Term (Monat*2 –1..) , der für Januar 1 und für Februar 3 ergibt.
Diese Korrektur wird ab März ausgeschaltet mit dem Term 3 / (Monat +1). Im März ist das Ergebnis =0, weil 3 / (3+1) = 3 / 4 = 0 (Ganzzahl).
Alternativ kann die Korrektur für Januar/Februar mit (Monat < 3) mit Boolescher Algebra oder mit (if ... then .. ) erfolgen.
(5) Weitere Formel
M = 3 + (Monat +9) MOD 12 ' Monat, jedoch 1 und 2 gewandelt in 13 und 14
TagNr = Tag + (153 * M –162) / 5 + SJ – M / 13 * (365 +SJ) ' Tagnummer im Jahr für Januar bis Dezember
Bei Januar und Februar ist M / 13 = 1 sonst 0. Damit werden 365 bzw. 366 Tage abgezogen, um die Tag-Nr. für Januar und Februar zu erhalten.
(6) Weitere Formel
TagNr = Tag + 2 / Monat * (Monat –1) *31 + (7 + Monat) / 10 * ((153 * Monat –162) / 5 + SJ) ' Tagnummer im Jahr für Januar bis Dezember
Der Term 2 / Monat ist ab März =0. Der Term (Monat –1) *31 ist im Januar =0 und im Februar = 31 für die 31 Tage des Januar.
Der Term (7 + Monat) / 10 ist erst ab März = 1 .
(7) Weitere Formel für Berechnung der Tagnummer
TagNr = Tag + 30 * Monat –30 + Monat *9 / 16 – (7 + Monat) / 10 *(2 – SJ) Schaltjahrkennung SJ siehe oben.
Zunächst werden für jeden Monat nach Januar 30 Tage angesetzt, dann wird korrigiert.
Der Term Monat *9 / 16 sorgt für + 1 Tag ab Januar bei ungeraden Monaten und ab August bei geraden Monaten.
Der Term (7+Monat) / 10 beträgt im Januar und Februar = 0 und ab März = 1. Damit wird ab März die Korrektur wegen Februar und Schaltjahr eingeschaltet.
(8) Tagnummer bestimmen mit Programmzeilen oder mit Formel errechnen für Programme z.B. Basic (1901 bis 2099) siehe Datum berechnen für Steuerungen
(9) Tagnummer von Ostern und den beweglichen Feiertagen berechnen
Tag mit Osterkennzahl E = 1 ist der 1. Dezember des Vorjahres auch bei Schaltjahren (SJ).
Der Jahrestag von Ostersonntag ist die Osterkennzahl plus 1 für Ostersonntag, minus 31 für Dezember und minus 3 bzw. 2 Tage wegen Februar.
TagNr (von Ostersonntag) = E – 33 + SJ
Beispiel: Ostersonntag ist der 20.4. 2014 mit der Osterkennzahl E = 143. (Berechnung der Osterkennzahl siehe unten)
Jahres-TagNr (Ostersonntag) = E – 33 + SJ = 143 – 33 + 0 = 110
TagNr (bewegliche Feiertage) = E – 33 + SJ + D
Beispiel: 2014 Pfingstmontag liegt 50 Tage nach Ostern Tagnummer = 143 –33 + 0 + 50 = 160
Rosenmontag liegt 48 Tage vor Ostern Tagnummer = 143 –33 + 0 – 48 = 62
TagNr (Buß- und Bettag) = 320 + SJ + E MOD 7
Erläuterung: Datum Tag = 16 + E MOD 7 und Tagnummer vom frühesten Datum 16.11. (=320) ergeben die Formel.
TagNr (Muttertag) = 128 + SJ + E MOD 7 – 118 / E * 7 (mit Korrektur wegen Pfingsten)
Erläuterung: Datum Tag = 8 + E MOD 7 –118 /E*7 und Tagnummer vom frühesten Datum 8. Mai (=128) ergeben die Formel.
(10) Abstand von Datum zu Datum (Datumsdifferenz), Variabler Abstand zwischen beweglichen Feiertagen
Wie viele Tage liegen zwischen Weihnachten und Ostern im nächsten Jahr?
Anzahl = E –33 +SJ + D
Beispiel 24.12.2011 und Ostersonntag 2012 (E = 131), 2012 ist ein Schaltjahr
Lösung mit TagNr (Ostersonntag) und zusätzlich als Distanz die Tage im Dezember D =31 –24 = 7 ergibt
Anzahl = E –33 +SJ +D = 131 –33 +1 +7 = 106
Wie viele Tage liegen zwischen Ostern und Weihnachten im gleichen Jahr?
Anzahl = 391 – E
Beispiel Ostersonntag 2012 (E = 131) und 24.12.2012, Anzahl = 391 – 131 = 260
Erläuterung: TagNr vom 24.12. (365 +SJ – 31+24 = 358 +SJ)
minus TagNr von Ostersonntag (E – 33 + SJ) = 358 +SJ – (E –33 +SJ) ergibt die Formel.
Wie viele Tage liegen zwischen Ostern und Buß- und Bettag bzw. Muttertag?
Anzahl = 353 – E + E MOD 7 = 353 – 131 + 5 = 227 Tage von Ostern bis Buß- und Bettag 2012
Anzahl = 161 – E + E MOD 7 – 118 / E *7 = 161 – 131 + 5 – 0 = 35 Tage von Ostern bis Muttertag
Beispiel Ostersonntag 2012 (E = 131), Erläuterung: Differenz der Tagnummern (8) ergibt diese Formeln.
Der größte Abstand zu Muttertag beträgt 42 Tage bei 12 frühen Osterterminen (E = 114 bis 125).
Der kleinste Abstand beträgt 14 Tage bei 2 späten Osternterminen (E = 147 und 148).
Wie viele Tage sind es noch bis Weihnachten?
Für jedes Datum wird die Tagnummer (=Jahrestag, siehe oben) ausgerechnet und die Differenz gebildet.
Welches Datum ist in 30 Tagen oder vor 30 Tagen?
Für das aktuelle Datum wird die Tagnummer (=Jahrestag, siehe oben) ausgerechnet und Anzahl Tage addiert bzw. subtrahiert.
Bei Überschreitung des Jahres müssen natürlich 365 bzw. 366 Tage addiert bzw. subtrahiert werden.
Das Datum wird mit der neuen Tagnummer berechnet (siehe unten).
(1) Monatslänge bestimmen = Letzter Tag (Datum) im Monat
Je nach Monat beträgt die Monatslänge 30 oder 31 oder 28 (29) Tage.
Der Abstand vom 1. eines Monats zum 1. eines anderen Monats kann mit der Differenz der Tagnummern berechnet werden.
Einfacher ist die Monatslänge 30 Tage mit ungerader bzw. gerader Monatszahl und Schaltjahr zu korrigieren.
SJ = 1 / (1+Jahr MOD 4) – 1 / (1+Jahr MOD 100) + 1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
Monatslänge = 30 + (Monat * 9 / 8) MOD 2 – 2 / Monat * (Monat –1) *(2 – SJ)
Der Term (Monat * 9 / 8) MOD 2 ergibt den Wert +1 ab Januar bei ungerader Monatszahl und ab August bei gerader Monatszahl.
2 / Monat * (Monat –1) ergibt nur für Februar den Wert 1 ansonsten 0. Alternativ: (Monat / 2)*(2 / Monat) ist nur Februar = 1.
(2) Anzahl der Tage der vorher gehenden Monate
In eine der obigen Formeln für Tag-Nummer wird Tag = 0 eingesetzt und man erhält für die vorher gehenden Monate
Anzahl Tage = 489 * Monat / 16 – 30 + (7 + Monat) / 10 *(SJ – 2) (gültig für Monate Januar bis Dezember)
z.B. für März 489 * 3 / 16 – 30 + (7+3) / 10 *(SJ –2) = 59 + SJ = Anzahl der Tage vor dem 1. März (Kontrolle 31 +28 +SJ).
Setzt man jeweils statt Monat den Wert (Monat +1) ein, erhält man den Jahrestag vom Monatsende, z.B. für Februar (2 +1).
Einfacher ist die folgende Formel
(3) Jahrestag am Monatsende
Monatsende TagNr = (153 * Monat – 9) / 5 + SJ + 1 / Monat * (3 – SJ)
Beispiel Februar = (153*2 – 9) / 5 + SJ + 0 = 59 bzw. 60 , Kontrolle (Januar + Februar = 31+28 +SJ)
Erläuterung: Die Formel basiert auf dem Monatsende, das gleich dem Folgemonat mit Datum Tag = 0 ist. Dadurch entfällt die Eingabe des Tages.
Term 1 / Monat ist nur für Januar =1 sonst =0. Für Januar ist das Ergebnis zunächst 28 Tage, deshalb wird mit +3 korrigiert.
Dabei wird auch SJ abgezogen, weil das Schaltjahr erst Ende Februar wirksam wird.
Alternative Formeln Monatsende TagNr = 30 *Monat + (Monat +1) *9 / 16 – (10 +Monat) / 12 *(2 – SJ)
Monatsende TagNr = 489 * (Monat +1) / 16 – 32 + SJ + 1 / Monat * (2 – SJ)
5) Datum aus Tag-Nummer des Jahres berechnen (alle Jahrhunderte)
Aufwändiger ist, Tagnummer des Jahres in ein Datum bestehend aus Tag und Monat umzuformen.
Januar, Februar und Schaltjahr (4-stellig) sind beim Umwandeln des Jahrestages in ein Datum in den Formeln berücksichtigt.
SJ = 1 / (1+Jahr MOD 4) – 1 / (1+Jahr MOD 100) + 1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
(1) Einfache Formel gültig für März bis Dezember
Tk = TagNr + 32 – SJ ' Tag Korrekturwert nur gültig März bis Dezember
Monat = Tk * 16 / 489
Tag = TagNr + 32 – SJ – 489 * Monat / 16
(2) Erweitert für Januar bis Dezember mit Tag-Korrektur ab März (Tag 60)
Tk = TagNr + 30 + (TagNr + SJ + 400) / 460 *(2 – SJ) ' Tag Korrekturwert gültig Januar bis Dezember
Monat = Tk * 16 / 489
Tag = TagNr + 30 – 489 * Monat / 16 + (7 + Monat) / 10 *(2 – SJ)
(3) Mit Januar und Februar als Monat 13 und 14 (+365 bzw. 366 Tage)
Tk = TagNr – SJ + ( 459 + SJ – TagNr ) / 400 * (365 + SJ) ' Tag Korrekturwert, Schaltjahr, Januar und Februar (+365 Tage)
Mk = ( Tk * 5 + 161 ) / 153 ' Monat Korrekturwert ( 3 bis 12, 13, 14)
Tag = Tk – ( 153 * Mk – 162 ) / 5 ' Datum Tag
Monat = 1 + ( Mk – 1 ) MOD 12 ' Datum Monat ( gewandelt in 1 bis 12)
Alternativ Monat = Mk – Mk / 13 * 12
(4) Mit Januar und Februar Tag- und Monats-Korrektur
Mk = SJ + (431 – TagNr ) / 400 * TagNr / 10 ' Monatskorrekturwert für Schaltjahr und Januar (Tag 1 bis 31)
Monat = (( TagNr – Mk ) * 5 + 161) / 153 ' Datum Monat
Tk = SJ + 3 / ( Monat +1) * ( 2 * Monat –1 – SJ ) 'Tag Korrekturwert Januar (+1), Februar (+3), Schaltjahr
Tag = TagNr – Tk – ( 153 * Monat – 162 ) / 5 ' Datum Tag
6) Wochen-Nummer berechnen, Kalenderwoche
Die Berechnung erfolgt mit der Tag-Nummer des Jahres, dessen Berechnung aus dem Datum siehe oben.
Das folgende Programm und die Formeln geben die Kalenderwoche von Montag bis Sonntag aus.
Die europäische Norm für die Wochennummerierung wird eingehalten. Achtung, Woche 1 ist die Woche, in welcher der 4. Januar liegt.
Die häufigen Fehler treten hier nicht auf, sondern am Anfang und Ende des Jahres werden die richtigen Wochennummern bestimmt.
Zum Beispiel liegt der 31.12.2013 in Woche 1 des Jahres 2014.
2015 hat 53 Wochen und die ersten Tage 2016 gehören zu Woche 53 des Jahres 2015.
6.1) Wochen-Nummer mit Programmzeilen bestimmen, Kalenderwoche
Eingänge des Programmbausteins sind Tag-Nr des Jahres in Variable D
und Jahr 4-stellig in Variable RJ ist gültig für alle Jahrhunderte
Ausgänge (Ergebnis) sind die Wochen-Nr. in Variable KW mit zugehörigem Jahr in Variable RJ
D = TagNr ' des Jahres 1 bis 365 bzw. 366
RJ = Jahr –1 ' Rechen-Jahr 4-stellig für 3.1. ist das Vorjahr
gosub WochenNr ' Berechnung der Wochennummer
if KW = 0 then goto WoNull ' à Woche vom 31.12. des Vorjahres
if KW = 53 then goto WoPruef ' à Woche vom 1.1. des Folgejahres prüfen
RJ = Jahr ' RJ wird gesetzt für Anzeige zugehöriges Jahr
goto ende ' à Fertig, Wochennummer 1 bis 52 liegt in Variable KW
#WoPruef ' Woche 53 prüfen mit Woche vom 1.1. des Folgejahres
D = 1
RJ = Jahr ' Rechenjahr für 3.1. (Vorjahr vom Folgejahr ist aktuelles Jahr)
gosub WochenNr ' (Wochennummer wird geprüft)
RJ = Jahr + 1 ' RJ wird gesetzt für Anzeige zugehöriges Jahr
if KW = 1 then goto ende ' à Fertig, Woche 1 des Folgejahres
KW = 53 ' Woche 53 ist richtig
RJ = Jahr ' RJ wird gesetzt für Anzeige zugehöriges Jahr
goto ende ' à Fertig, Wochennummer 53
#WoNull ' gültig ist Woche vom 31.12. bzw. 30.12. des Vorjahres
D = 365 ' Jahrestag 365 = 31. bzw. 30.12.
RJ = Jahr – 2 ' Rechenjahr für Berechnung Wochentag 3. Januar ist wegen Januar das Vorvorjahr
gosub WochenNr ' (Korrektur der Wochennummer und des Jahres)
RJ = Jahr – 1 ' RJ wird gesetzt für Anzeige zugehöriges Jahr
goto ende ' à Fertig, Wochennummer 52 bzw. 53 liegt in Variable KW
' Unterprogramm, Grundformel zur Bestimmung der Wochennummer
#WochenNr '
' Rechenjahr für Berechnung Wochentag 3. Januar ist wegen Januar immer das jeweilige Vorjahr
WoTag = ((3 + RJ + RJ / 4 – RJ / 100 + RJ / 400) MOD 7 ' WoTag 3.1. im Jahr RJ
KW = (WoTag + D +3) / 7 ' Wochennummer
Return ' à Ausgang: Wochennummer KW
#ende
print “ Woche: “;KW;“ zu Jahr “;RJ;“ “ ' Wochennummer mit zugehörigem Jahr
Wenn am Anfang des Jahres Woche 52 oder 53 gilt, dann zeigt das zugehörige Jahr das Vorjahr.
Wenn am Ende des Jahres Woche 1 gilt, dann ist das zugehörige Jahr das Folgejahr.
Anmerkung: Das Programm berechnet den Wochentag vom 3. Januar mit dem Rechenjahr = (Jahr –1), weil im Januar ein Schaltjahr noch nicht wirksam ist.
6.2) Wochen-Nummer mit Formeln berechnen mit Datum Tag Monat Jahr
SJ = 1 / (1+Jahr MOD 4) –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
Alternative Formel einschließlich Schaltjahr vor dem aktuellen
DJ = 2 / (1+Jahr MOD 4) – 2 / (1+Jahr MOD 100) +2 / (1+Jahr MOD 400) ' im Schaltjahr = 2, Schaltjahr +1 = 1, sonst = 0
SJ = DJ / 2 ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
SVJ = DJ – 2 *SJ ' Schaltjahrkennung für Vorjahr = 1, sonst = 0
JT = Tag + 489 * Monat / 16 – (7 + Monat) / 10 *(2 – SJ) – 30 ' Tag-Nr des Jahres
(1) Wochennummer für alle Jahrhunderte mit Osterkennzahl E (Osterberechnung E siehe unten)
JT = Tag-Nr des Jahres und Schaltjahr SJ SVJ (wie vor)
A = (6 * E +1 – SJ) MOD 7 ' Wochentag 3.1. berechnet mit Osterkennzahl E
G = (JT + A +3 ) / 7 ' Grundwert Wochennummer (richtig bei 1 bis 52)
AJ = (53 – G) / 53 ' =1 bei G = 0 Vorjahr am Anfang des Jahres (sonst =0)
EJ = G / 53 '=1 bei G =53 am Ende des Jahres (sonst =0)
'Prüfung bei Woche = 53 (Ende des Jahres)
ZE = 1 – (A + SJ) / 6 ' = 0 bei Jahr mit 53 Wochen, weil 3.1. Sa oder Fr +SJ = 6 oder 7
KE = EJ * ZE *52 ' bei Woche 53 (= 0 bzw. 52 zur Erzeugung Woche 1)
'Prüfung bei Woche = 0 (Anfang des Jahres)
AV = (6*E – SJ – SVJ) MOD 7 ' Wochentag 3.1. Vorjahr
ZV = (AV + SVJ) / 6 ' = 1 bei Vorjahr 53 Wo., weil 3.1.Vorjahr Sa oder Fr +VSJ = 6 oder 7
KA = AJ * (52 + ZV) ' bei WoNr =0 , dafür 52 bzw. 53
WoNr = G + KA – KE ' Wochennummer
Zugehöriges Jahr = Jahr – AJ + EJ * ZE ' mit Korrektur für Anfang bzw. Ende Jahr
(2) Wochennummer mit Jahr 4-stellig für 1901 bis 2099
JT = Tag-Nr des Jahres (siehe 1)
G = ((5 * Jahr +3) / 4 MOD 7 + JT +3) / 7 ' Grundwert Wochennummer
A = 1 / (G +1) ' =1 für Berechnung mit Vorjahr bei G =0
KA = A * 362 ' Korrektur Jahresanfang bei G = 0; Woche 53 oder 52
KE = G / 53 * ((5 * Jahr +8) / 4 MOD 7 + 4) / 7 *52 ' Korrektur Jahresende bei G = 53; für Woche 1 statt 53
WoNr = ((5 * (Jahr – A) +3) / 4 MOD 7 + JT +3 + KA) / 7 – KE ' Wochen-Nummer
(3) Jahr (year) 2-stellig 01 bis 99 für 2001 bis 2099
JT = Tag-Nr des Jahres (siehe 1)
G = ((5 * year +7) / 4 MOD 7 + JT +3) / 7 ' Grundwert Wochennummer
A = 1 / (G +1) ' =1 für Berechnung mit Vorjahr bei G =0
KA = A * 362 ' Korrektur Jahresanfang bei G = 0; Woche 53 oder 52
KE = G / 53 * ((5 * year +12) / 4 MOD 7 + 4) / 7 *52 ' Korrektur Jahresende bei G = 53; für Woche 1 statt 53
WoNr = ((5 * (year – A) +7) / 4 MOD 7 + JT +3 + KA) / 7 – KE ' Wochen-Nummer
(4) Wochennummer für alle Jahrhunderte mit Jahr 4-stellig (Alternative 1)
JT = Tag-Nr des Jahres und Schaltjahr SJ SVJ (siehe 1)
Jx = (Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400) MOD 7 ' Wochentag 31.12. (Jahr)
A = (2 + Jx – SJ) MOD 7 ' Wochentag 3.1., Jx Jahreskennziffer
G = (JT + A +3 ) / 7 ' Grundwert Wochennummer (richtig bei 1 bis 52)
AJ = (53 – G) / 53 ' =1 bei G = 0 Vorjahr am Anfang des Jahres (sonst =0)
EJ = G / 53 '=1 bei G =53 am Ende des Jahres (sonst =0)
'Prüfung bei Woche = 53 (Ende des Jahres)
ZE = 1 – (A + SJ) / 6 ' =0 bei Jahr mit 53 Wochen, weil 3.1. Sa oder Fr +SJ = 6 oder 7
KE = EJ * ZE *52 ' bei Woche 53 (= 0 bzw. 52 zur Erzeugung Woche 1)
'Prüfung bei Woche = 0 (Anfang des Jahres)
AV = (Jx + 1 – SJ – SVJ) MOD 7 ' Wochentag 3.1. Vorjahr
ZV = (AV + SVJ) / 6 ' = 1 , bei Vorjahr 53 Wochen, weil 3.1.Vorjahr Sa oder Fr +VSJ = 6 oder 7
KA = AJ * (52 + ZV) ' bei WoNr =0 , dafür 52 bzw. 53
WoNr = G + KA – KE ' Wochennummer
Zugehöriges Jahr = Jahr – AJ + EJ * ZE ' mit Korrektur für Anfang bzw. Ende Jahr
(5) Wochennummer für alle Jahrhunderte (Alternative 2)
JT = Tag-Nr des Jahres und Schaltjahr SJ (siehe 1)
VJ = Jahr –1 ' Vorjahr für Berechnung Wochentag im Januar des Jahres
A = (3 + VJ + VJ / 4 – VJ / 100 + VJ / 400) MOD 7 ' Wochentag 3.1. des aktuellen bei Jahres
G = (A + JT +3) / 7 ' Grundwert Wochennummer (richtig bei 1 bis 52)
KA = (100 – G) / 100 ' bei G =0 Korrektur für Anfang des Jahres KA=1 für Berechnung mit Jahresende vom Vorjahr
KE = G / 53 ' bei G =53 Korrektur für Ende des Jahres KE=1 für Berechnung mit Jahresanfang vom Folgejahr
RJ = Jahr –1 – KA + KE ' Rechenjahr mit Vorjahr bei G = 0 bzw. mit Folgejahr zum Prüfen bei Wo =53
RT = (3 + RJ + RJ / 4 – RJ / 100 + RJ / 400) MOD 7 ' Wochentag 3.1. entsprechend Jahr, Vorjahr oder Folgejahr
W = (RT + 3 + JT *(1 – KE) + KA *362) / 7 ' Wochennummer berechnet mit Rechenjahr bzw. mit Ende Vorjahr bzw. mit Anfang Folgejahr
KJ = (100 – W) / 100 ' Korrektur Jahr KJ= 1 bei Wochenwert W = 0
WoNr = W + KJ * 53 ' Wochen-Nummer
zugehöriges Jahr = RJ + 1 – KJ
Erläuterung:
Die Gültigkeit der Wochennummer 53 am Jahresende wird mit der Wochennummer vom Anfang des Folgejahrs geprüft.
Wenn das Ergebnis =0 ist, stellt obiger Rechengang 53 wieder her. Andernfalls lautet das Ergebnis Woche 1.
Der Term (100 – W) / 100 ergibt = 1 bei Wochenwert W = 0 , bei Wochenwert W = 1 (bis 53) ist das Ergebnis des Terms = 0.
Da mit dem Folgejahr gerechnet wurde, wird damit auch das zugehörige Jahr zur Wochennummer bestimmt.
(6) Wochennummer für alle Jahrhunderte (Alternative 3)
ZJ = Jahr / 4 – Jahr / 100 + Jahr / 400 ' Anzahl Schalttage vorher gehender Jahre für aktuelles Jahr
VJ = Jahr –1 ' Vorjahr
ZVJ = VJ / 4 – VJ / 100 + VJ / 400 ' Anzahl Schalttage für Vorjahr
SJ = ZJ – ZVJ ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
JT = Tag + 489 * Monat / 16 – (7 + Monat) / 10 *(2 – SJ) – 30 ' Tag-Nr des Jahres
A = (2 + Jahr + ZVJ) MOD 7 ' WoTag 3.1. bei Jahr
G = (A + JT +3) / 7 ' Grundwert Wochennummer (richtig bei 1 bis 52)
KA = (100 – G) / 100 ' bei G =0 Korrektur für Anfang des Jahres KA=1 für Berechnung mit Jahresende vom Vorjahr
KE = G / 53 ' bei G =53 Korrektur für Ende des Jahres KE=1 für Berechnung mit Jahresanfang vom Folgejahr
RJ = Jahr –1 – KA + KE ' Rechenjahr mit Vorjahr bei G = 0 bzw. mit Folgejahr zum Prüfen bei Wo =53
RT = (3 + RJ + RJ / 4 – RJ / 100 + RJ / 400) MOD 7 ' Wochentag 3.1. entsprechend Jahr, Vorjahr oder Folgejahr
W = (RT + 3 + JT *(1 – KE) + KA *362) / 7 ' Wochennummer berechnet mit Rechenjahr bzw. mit Ende Vorjahr bzw. mit Anfang Folgejahr
KJ = (100 – W) / 100 ' Korrektur Jahr KJ= 1 bei Wochenwert W = 0
WoNr = W + KJ * 53 ' Wochen-Nummer
zugehöriges Jahr = RJ + 1 – KJ
(7) Wochennummer für alle Jahrhunderte (Alternative 4)
VJ = Jahr –2
ZVV = VJ / 4 – VJ / 100 + VJ / 400 ' Anzahl Schalttage Vorvorjahr
RJ = Jahr –1 '
ZVJ = RJ / 4 – RJ / 100 + RJ / 400 ' Anzahl Schalttage Vorjahr
ZJ = Jahr / 4 – Jahr / 100 + Jahr / 400 ' Anzahl Schalttage aktuelles Jahr
SVJ = ZVJ – ZVV ' Schaltjahrkennung für Vorjahr = 1, sonst = 0
SJ = ZJ – ZVJ ' Schaltjahrkennung für Jahr = 1, sonst = 0
JT = Tag + 489 * Monat / 16 – (7 + Monat) / 10 *(2 – SJ) – 30 ' Tag-Nr des Jahres
A = (2 + Jahr + ZVJ) MOD 7 ' Wochentag 3.1. Jahr (ZVJ Schaltjahre bis Vorjahr, weil Januar)
G = (A + JT +3) / 7 ' Grundwert Wochennummer (richtig bei 1 bis 52)
'Prüfen bei Woche = 53 für Jahresende Woche 53 oder 1
B = (A + SJ) MOD 7 / 6 ' = 1, wenn Jahr 53 Wochen (3.1. ist Samstag ohne oder Freitag mit Schaltjahr)
C = A / 6 * SJ ' = 1, wenn Jahr 53 Wochen (3.1. ist Samstag im Schaltjahr)
JE = G/53 *(1 – B – C) ' = 1 , wenn Wo 1 statt 53
KE = JE *52 ' Korrekturwert für Ende des Jahres, wenn Wo 1 statt 53
'Prüfen bei Woche = 0 für Jahresanfang Woche 52 oder 53
D = (A + 6 – SVJ) MOD 7 / 6 ' =1 , wenn Vorjahr 53 Wochen (3.1. ist Samstag ohne oder Freitag mit Schaltjahr)
F = (A + 6) MOD 7 / 6 * SVJ ' =1 , wenn Vorjahr 53 Wochen (3.1. ist Samstag im Schaltjahr)
KJ = (100 – W) / 100 ' Korrektur Jahr KJ= 1 bei Wochenwert W = 0
KA = KJ *(52 + D + F) ' Korrektur für Anfang des Jahres, wenn Wo =0, dann Vorjahr WoNr 52 oder 53
WoNr = G – KE + KA ' Wochen-Nummer
zugehöriges Jahr = Jahr – KJ + JE
(8) Wochennummer für alle Jahrhunderte (Alternative 5)
SJ = 1 / (1+Jahr MOD 4) –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
JT = Tag + 489 * Monat / 16 – (7 + Monat) / 10 *(2 – SJ) – 30 ' Tag-Nr des Jahres
RJ = Jahr –1 ' Vorjahr
SVJ = 1 / (1+RJ MOD 4) –1 / (1+RJ MOD 100) +1 / (1+RJ MOD 400) ' Schaltjahrkennung vom Vorjahr
A = (3+RJ + RJ / 4 – RJ / 100 + RJ / 400) MOD 7 ' Wochentag 3.1. Jahr (RJ Vorjahr, weil Januar)
G = (A + JT +3) / 7 ' Grundwert Wochennummer (richtig bei 1 bis 52)
'Prüfen bei Woche = 53 für Jahresende Woche 53 oder 1
B = (A + SJ) MOD 7 / 6 ' = 1, wenn Jahr 53 Wochen (3.1. ist Samstag ohne oder Freitag mit Schaltjahr)
C = A / 6 * SJ ' = 1, wenn Jahr 53 Wochen (3.1. ist Samstag im Schaltjahr)
JE = G/53 *(1 – B – C) ' = 1 , wenn Wo 1 statt 53
KE = JE *52 ' Korrekturwert für Ende des Jahres, wenn Wo 1 statt 53
'Prüfen bei Woche = 0 für Jahresanfang Woche 52 oder 53
D = (A + 6 – SVJ) MOD 7 / 6 ' =1 , wenn Vorjahr 53 Wochen (3.1. ist Samstag ohne oder Freitag mit Schaltjahr)
F = (A + 6) MOD 7 / 6 * SVJ ' =1 , wenn Vorjahr 53 Wochen (3.1. ist Samstag im Schaltjahr)
KJ = (100 – W) / 100 ' Korrektur Jahr KJ= 1 bei Wochenwert W = 0
KA = KJ *(52 + D + F) ' Korrektur für Anfang des Jahres, wenn Wo =0, dann Vorjahr WoNr 52 oder 53
WoNr = G – KE + KA ' Wochen-Nummer
zugehöriges Jahr = Jahr – KJ + JE
Erläuterung zu den Formeln:
Ein Jahr hat 53 Wochen, wenn 1. Januar Donnerstag oder bei Schaltjahr Mittwoch ist.
Der 3. Januar ist dann Wochentag 6 Samstag. bzw. bei Schaltjahr Freitag.
Wochentag / 6 ergibt nur Samstag = 1 ansonsten = 0 und ist damit ein Merkmal für ein Jahr mit 53 Wochen, wenn zusätzlich bei Schaltjahr SJ addiert wird.
Beim Vorjahr war der Wochentag 3.1. z.B. Freitag statt Samstag bezogen auf das aktuelle Jahr. Die Differenz beträgt also 1 Tag und im Schaltjahr 2 Tage.
Deshalb wird beim Wochentag –1 gerechnet, jedoch bei der Modulo-Division +7 –1 ergänzt, um negative Zahl zu vermeiden. Hier wird zusätzlich bei Schaltjahr VSJ subtrahiert.
7) Tag-Nr. und Datum aus einer Kalenderwoche berechnen
Das Ergebnis ist zunächst die Tag-Nummer im Jahr und muss in Tag und Monat umgeformt werden.
Woche 1 ist die Woche, in der der 4. Januar liegt. Der 1. bis 3. Januar kann in Woche 52 oder 53 des Vorjahres liegen.
Entsprechend können Dezembertage in Woche 1 des Folgejahres liegen.
Bei Wochennummer 52 bzw. 53 am Anfang des Jahres muss das Vorjahr eingesetzt werden.
Bei Wochenummer 1 am Ende des Jahres muss das Folgejahr eingesetzt werden.
7.1) Tag-Nr. bzw. Datum vom Wochenanfang einer Kalenderwoche (Montag)
TagNr = WoNr *7 – 3 – (( 5 * year +7) / 4) MOD 7 ' year 2-stellig für 2000 bis 2099
TagNr = WoNr *7 – 3 – (( 5 * Jahr +3) / 4) MOD 7 ' Jahr 4-stellig für 2000 bis 2099
7.2) Allgemein für alle Wochentage (WoTag 0 bis 6 = So, Mo, Di, Mi, Do, Fr, Sa)
TagNr = WoNr *7 – 3 + (WoTag +6) MOD 7 – (( 5 * Jahr +3) / 4) MOD 7 ' Jahr 4-stellig für 2000 bis 2099
Schaltjahr SJ wie oben, Jx = (Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400) MOD 7 ' Jahr 4-stellig ab 1583 (gregorianisch)
TagNr = WoNr *7 – 3 + (WoTag +6) MOD 7 – (2 + Jx – SJ) MOD 7 ' Jahr 4-stellig für alle Jahrhunderte
Aus der TagNr kann das Datum (Tag und Monat) gebildet werden. Formeln siehe oben.
8) Wochentag eines Datums berechnen (DOW)
Der Wochentag eines Datums z.B. 1. Januar gleitet jedes Jahr 1 Tag weiter jedoch nach einem Schaltjahr 2 Tage.
Dadurch liegen die 7 Wochentage wegen der Schaltjahre im 4-Jahresrhythmus alle 28 Jahre auf demselben Datum (innerhalb eines Jahrhunderts).
8.1) Wochentag mit der Tag-Nummer des Jahres berechnen
SJ = 1 / (1+Jahr MOD 4) – 1 / (1+Jahr MOD 100) + 1 / (1+Jahr MOD 400) ' Schaltjahr (SJ) = 1 , sonst = 0
TagNr = Tag + 489 * Monat / 16 – (7 + Monat) / 10 *(2 – SJ) – 30 ' Tagnummer im Jahr (andere Formeln, siehe 3.)
(1) Allgemein für alle Jahrhunderte (ab 1.1.1583, Gregorianischer Kalender) mit Osterkennzahl E (Osterberechnung E siehe unten)
WoTag = (TagNr + 152 – E – SJ) MOD 7 ' Tag 0 bis 6 (So, Mo, Di, Mi, Do, Fr, Sa)
WoTag = (TagNr + 6 * E – 2 – SJ) MOD 7 'alternativ
Ed = E MOD 7 WoTag = (TagNr + 12 – Ed – SJ) MOD 7 ' alternativ mit Osterkennziffer Ed
(2) Allgemein für alle Jahrhunderte (ab 15.10.1582, Gregorianischer Kalender) mit Jahreskennziffer Jx
Jx = (Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400) MOD 7 ' Wochentag 31.12. Jahr (4-stellig)
WoTag = ( Jx + TagNr – 1 – SJ ) MOD 7 ' Tag 0 bis 6 (So, Mo, Di, Mi, Do, Fr, Sa)
TagKW = ( Jx + TagNr – 2 – SJ ) MOD 7 + 1 ' Tag 1 bis 7 ( Mo, Di, Mi, Do, Fr, Sa, So)
Bei Jahren mit gleichem Jx stimmen Wochentag und Datum überein (Schaltjahr berücksichtigen).
Erläuterung zu (1) (2): Der Wochentag ist im Schaltjahr in der Tagnummer ab 29. Februar bereits erhöht enthalten.
Jx ist immer der Wochentag vom 31. Dezember und vom 1.1. außer im Schaltjahr. Dort ist es der Wochentag vom 31.12. minus SJ (Jx – SJ).
1.1. hat bereits den richtigen Wochentag, deshalb steht in der Formel Tag-Nr –1 .
Ebenfalls hat Ostern (Sonntag) den Bezug auf 1.1. minus SJ.
Grundlage:
Bei der gregorianischen Reform des Kalenders wurden genial die Anzahl der Tage ab Jahr 1 so geändert, dass der Rest bei Division durch 7 den Wochentag ergibt.
Wochentag vom Jahrestag = (Anzahl aller Tage ab Jahr 1) MOD 7
Beispiel (rechnerisch gregorianisch):
1.1.0001 ist nur 1 Tag ab Jahr 1 vergangen, WoTag = 1 + 0 = 1 (Montag)
1.1.0002 sind 1 + 365 Tage vergangen, WoTag = (1 + 365) MOD 7 = 2 (Dienstag)
Beispiel: Wochentag 23.1.2017 = (Anzahl aller Tage bis 23.1.2017) MOD 7
23. Januar 2017 = Tag-Nr 23 im Jahr
Anzahl aller Tage bis Vorjahr 31.12.2016 = 365 * 2016 + 2016 / 4 – 2016 / 100 + 2016 / 400
Anzahl aller Tage bis 23.1.2017 = Anzahl aller Tage bis 31.12.2016 + Jahrestag 23.1. = 735840 + 504 – 20 + 5 + 23 = 736352
Wochentag 23.1.2017 = 736352 MOD 7 = 1 (Montag)
Einfacher: Weil 365 MOD 7 = 1 ergibt, kann Jahreskennziffer Jx angewendet werden.
Jx (von 2016) = (2016 + 2016 / 4 – 2016 / 100 + 2016 / 400) MOD 7 = 6
WoTag = (Jx + TagNr) MOD 7 = (6 + 23) MOD 7 = 29 MOD 7 = 1 (Montag)
Wird Jx von 2017 verwendet, sind 365 Tage zuviel addiert und wegen 365 MOD 7 = 1 ist Jx um 1 erhöht.
Deshalb steht in Formel (2) TagNr –1 und zusätzlich – SJ wegen Schaltjahr.
(3) Tag (0 bis 6) der Woche (Jahr 2000 bis 2099, jedoch nur 2-stellig 00 bis 99)
DOW = (year + (year +23) / 4 + TagNr ) MOD 7 ' Tag 0 bis 6 (year 2-stellig)
oder mathematisch umgeformt: DOW = ((5*year +23) / 4 + TagNr ) MOD 7
(4) Tag (0 bis 6) der Woche (Jahr 1901 bis 2099, vierstellig)
DOW = (Jahr + (Jahr +19) / 4 + TagNr ) MOD 7 ' Tag 0 bis 6 (Jahr 4-stellig)
(5) Tag (1 bis 7) der Kalenderwoche (Jahr 2000 bis 2099)
TagKW = (year + (year +19) / 4 + TagNr ) MOD 7 + 1 ' Tag 1 bis 7 (year 2-stellig)
(6) Tag (1 bis 7) der Kalenderwoche (Jahr 1901 bis 2099)
TagKW = (Jahr + (Jahr +15) / 4 + TagNr ) MOD 7 + 1 ' Tag 1 bis 7 (Jahr 4-stellig)
(7) Wochentag Julianischer Kalender
Schaltjahr SJ = 1 / (1+Jahr MOD 4) ' Schaltjahr (SJ) = 1 , sonst = 0
WoTag = (Tagnummer –3 – SJ + Jahr + Jahr / 4) MOD 7 Tag 0 bis 6 (So, Mo, Di, Mi, Do, Fr, Sa)
Beispiel: 3.1.0001 WoTag = 3 –3 –0 +1 + 0 = 1 (Montag)
8.2) Wochentag mit dem Datum (Tag, Monat, Jahr) berechnen
(1) Wochentag berechnen mit Osterkennzahl E Allgemein für alle Jahrhunderte (ab 1583)
(1.1) Monatswert m anstelle Monat und Osterkennzahl E anstelle Jahr
Weihnachten, Silvester und niederl. Königinnentag hängen direkt nicht an Ostern. Warum kann man die Wochentage trotzdem auf diese Weise errechnen?
Mit der Osterkennzahl eines Jahres ist Wochentag Sonntag und Datum gekoppelt.
Deshalb kann man mit meiner Osterkennzahl eines Jahres den Wochentag eines beliebigen Datums und Feiertage z.B. Heiligabend bestimmen.
Dabei ist das Jahr beliebig, weil es schon in der Osterkennzahl berücksichtigt wurde. Ebenso sind Schaltjahre bereits enthalten und müssen nur bei Januar / Februar beachtet werden.
Deshalb sind diese Formeln sehr einfach, z.B. WoTag = 6 – E MOD 7 ' Wochentag Heiligabend 24.12. oder WoTag = 6 * E MOD 7 ' Wochentag 25.12.
SJ = 1 / (1+Jahr MOD 4) –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
m = (13 * Monat +3) / 5 + (12 – Monat) / 10 * (Monat +1 – SJ) ' Monatswert mit Korrektur für Januar/Februar
WoTag = (Tag + m + 6 * E ) MOD 7 ' Wochentag für beliebiges Datum (gregorianisch)
WoTag = (Tag + m + 6 * Ed ) MOD 7 ' alternative Formel mit der Osterkennziffer Ed
Bei meiner Lösung ist vorteilhaft, dass das Schaltjahr bereits in der Osterkennzahl E ab März enthalten ist.
Anstelle der Formeln können auch die Werte aus den folgenden Tabellen eingesetzt werden und Vielfaches von 7 abgezogen werden (z.B. 15 MOD 7 = 1 MOD 7).
Beispiel: Wochentag 25.12.2012 = (25 + 3 + 6 * 5) MOD 7 = 58 MOD 7 = 2 (Dienstag), weil (25+3) MOD 7 = 0 gilt 6*E MOD 7 bzw. 6*Ed MOD 7 für jedes Jahr 25.12.
Tabellenwert m je Monat in Klammern, die Werte sind mit MOD 7 reduziert und können statt der obigen Berechnung von m genutzt werden:
Jan (5 bzw. 4), Feb (1 bzw. 0), März (1), Apr (4), Mai (6), Juni (2), Juli (4), Aug (0), Sept (3), Okt (5), Nov (1), Dez (3)
bei Januar / Februar gilt der zweite Wert für Schaltjahre ( wegen minus SJ)
Für E kann auch Osterkennziffer Ed = E MOD 7 (Rest nach Division durch 7) eingesetzt werden. Sie beträgt für
2008 (3), 2009 (2), 2010 (1), 2011 (0),.2012 (5), 2013 (4), 2014 (3), 2015 (2), 2016 (0), 2017 (6), 2018 (5), 2019 (4), 2020 (2),...
Die Osterkennziffer Ed folgt einem Gesetz –1 von Jahr zu Jahr und im Schaltjahr –2 . Wird die Zahl negativ, muss 7 addiert werden z.B. 2011 auf Schaltjahr 2012 (0 –2 +7 = 5).
(1.2) Monatswert KT anstelle Monat und Osterkennzahl E anstelle Jahr
ist eine weitere Möglichkeit zur Berechnung des Wochentages.
Weil die Monatslängen kein Vielfaches der Woche sind, wird hier ein Monatswert für die Korrektur der Tage KT benutzt.
SJ = 1 / (1+Jahr MOD 4) –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
M = 1 + (Monat + 9) MOD 12 ' Monat gewandelt in März = 1 bis Februar = 12
KT = M * 31 / 12 – M / 11 * (1 + SJ) ' Korrektur Tag je nach Monat mit Korrektur für Januar/Februar
WoTag = 6 – ( E – Tag – KT ) MOD 7 ' Wochentag für beliebiges Datum (gregorianisch) mit der Osterkennzahl E statt Jahr.
WoTag = 6 – (42 + Ed – Tag – KT ) MOD 7 ' alternative Formel mit der Osterkennziffer Ed
WoTag = (6 * E + Tag – 1 + KT) MOD 7 ' alternative Formel, Wochentag für beliebiges Datum
WoTag = (6 * Ed + Tag – 1 + KT) MOD 7 ' alternativ wird hier die Osterkennziffer Ed = E MOD 7 eingesetzt.
Beispiel Nikolaus 6.12.2012:
M = 1+(12+9) MOD 12 =1+9 = 10 für Dezember,
KT = 10*31/12= 310/12 = 25, (Osterkennzahl E = 131 für 2012, Berechnung siehe unten)
WoTag = 6 – ( E – Tag – KT ) MOD 7 = 6 – (131 –6 –25) MOD 7 = 6 –2 = 4 (= Donnerstag)
Tabellenwert je Monat, KT in Klammern, die Werte sind mit MOD 7 reduziert und können statt der obigen Berechnung genutzt werden:
Jan (6 bzw. 5), Feb (2 bzw. 1), März (2), Apr (5), Mai (0), Juni (3), Juli (5), Aug (1), Sept (4), Okt (6), Nov (2), Dez (4)
bei Januar / Februar gilt der zweite Wert für Schaltjahre ( wegen minus SJ)
Hinweis: Bei gleichen Werten je Monat sind die Wochentage der Monate gleich, z.B. Wochentag 1. März = 1. November
Erläuterung zu dieser Berechnung von KT:
M = 1 + (Monat + 9) MOD 12 ' Monat gewandelt in März = 1 bis Februar = 12
KT = M * 31 / 12 – M / 11 * (1 + SJ) ' Korrektur Tag je nach Monat mit Korrektur für Januar/Februar
Alternativ KT = M * 31 / 12 + M / 11 * (6 – SJ)
Die Monate werden in März = 1 usw. gewandelt. Januar und Februar liegen hier als Monat 11 und 12 nach Dezember.
Für Januar und Februar erfolgt durch M / 11 die Korrektur –1. Dies entspricht der Berechnung mit dem Vorjahr.
Das Schaltjahr ist erst ab März wirksam, deshalb wird KT nur im Januar und Februar im Schaltjahr um einen weiteren Tag reduziert.
Andere Formel zur Berechnung von KT
KJF = (12 – Monat) / 10 * (Monat + 1 – SJ) ' Korrektur Januar , Februar (Schaltjahr)
KT = (13 * Monat +8) / 5 + KJF ' Korrektur Tag je nach Monat
Erläuterung zu dieser Berechnung von KT:
Durch (12 – Monat) / 10 wird für Januar und Februar Korrektur + 2 bzw. +3 wirksam.
Das Schaltjahr ist erst ab März wirksam, deshalb wird KT nur im Januar und Februar im Schaltjahr um einen weiteren Tag reduziert.
Weitere Formel zur Berechnung von KT
KT = (Monat –2 + (12 – Monat) / 10 * (9 – 3 * SJ)) * 31 / 12 ' Korrektur Tag je nach Monat
Erläuterung zu dieser Berechnung von KT:
Die Korrektur Tag je nach Monat KT wird hier mit einer Formel berechnet, die die passenden Werte von anderen Monaten für Januar / Februar benutzt.
Durch Monat –2 wird die Rechengröße z.B. für Dezember = 10 und Januar wird zu 1 –2 +9 = 8 (=Oktober) korrigiert.
KT MOD 7 = 8 *31/12 MOD 7 = 20 MOD 7 = 6 (vergleiche Tabelle mit den Werten KT MOD 7)
Damit erhält man für Januar (statt 0) den Wert von Oktober (KT=6). Bei Februar (statt 3) bekommt man der Wert von November (KT=2).
Im Schaltjahr wird der Monat zusätzlich mit –3 *SJ korrigiert und man erhält die Werte von Juli und August, die nochmals –1 kleiner sind.
(2) Wochentag mit Jahr berechnen Allgemein für alle Jahrhunderte
als Tag 0 bis 6 (So, Mo, Di, Mi, Do, Fr, Sa)
WoTag = ( Tag + KT + Jahr + Jahr / 4 – Jahr/100 + Jahr / 400 ) MOD 7 ' Wochentag für Datum (gregorianisch ab 15.10.1582)
WoTag = ( Tag + KT + Jahr + Jahr / 4 – 2 ) MOD 7 ' Wochentag für Datum (julianisch)
KT siehe bei (1). Bei meiner Lösung ist vorteilhaft, dass das Jahr bei Januar und Februar nicht das Vorjahr sein muss. Die Korrektur ist in KT enthalten.
Alternativ mit Jx = (Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400) MOD 7 ' Wochentag 31.12. Jahr (4-stellig)
WoTag = ( Tag + KT + Jx ) MOD 7 ' Wochentag für Datum (gregorianisch ab 15.10.1582)
(3) Wochentag am Anfang und Ende des Jahres Jahr 4-stellig ab 1583 (gregorianisch)
31. 12. WoTag = (Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400) MOD 7 ' Wochentag vom 31. Dezember
1. 1. WoTag = (Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400 – SJ ) MOD 7 ' Wochentag vom 1. Januar
Schaltjahrkennung SJ siehe oben. Der 1.1. und 31.12. haben denselben Wochentag außer in Schaltjahren.
(4) Wochentag vom Monatsende
Die folgenden Formeln entstanden, indem Tag = 0 und der Folgemonat (Monat +1) in obige Formeln eingesetzt wurden.
ML = (13 * Monat + 16) / 5 + 1 / Monat * (3 – SJ) ' Monatswert mit Korrektur Januar
LetzterWoTag = (ML + 6 * E) MOD 7 ' Letzter Wochentag für beliebigen Monat (gregorianisch)
alternativ
ME = 1 + (Monat + 10) MOD 12
KTL = ME * 31 / 12 – ME / 11 * (1 + SJ) ' Korrektur Tag für letzten Wochentag im Monat
mit Osterkennzahl LetzterWoTag = 6 – ( E – KTL ) MOD 7 ' Letzter Wochentag für beliebigen Monat (gregorianisch)
mit Jahr LetzterWoTag = ( KTL + Jahr + Jahr / 4 – Jahr/100 + Jahr / 400 ) MOD 7 ' Letzter Wochentag für beliebigen Monat (gregorianisch
Letzter Sonntag im Monat usw. siehe weiter unten.
(5) Weitere Lösung: Wochentag mit Jahr berechnen, allgemein für alle Jahrhunderte (Tag 0 bis 6, So, Mo, Di, Mi, Do, Fr, Sa)
Das Schaltjahr ist ein Problem, weil es im Januar und Februar nicht wirksam ist, sondern erst ab März.
Monatswert MK und Rechenjahr bilden
JF = 3 / (Monat +1) ' Schalter Jan Feb = 1, sonst = 0
n = Monat + JF * 12 ' Für Januar, Februar wird Monat 13, 14 gebildet
MK = (13 * n + 8) / 5 ' Monats-Konstante errechnen
RJ = Jahr – JF ' Rechenjahr ist Vorjahr bei Jan Feb, sonst Jahr
Alternativ mit meinen anderen Formeln:
RJ = Jahr – (14 – Monat) / 12 ' Rechenjahr ist Vorjahr bei Jan Feb, sonst Jahr
MK = (1 + (Monat + 9) MOD 12) * 31 / 12 ' Monats-Konstante errechnen
1+(Monat + 9) MOD 12 wandelt die Monatszahl: März (= Monat 1) bis Februar (= Monat 12).
Wie in alten Zeiten stimmen Name und Zahl überein: September =7, Oktober =8, November =9 und Dezember =10.
Üblich ist auch, für die Monatsanfänge eine Tabelle zu benutzen.
Tabellenwert je Monat MK in Klammern: (MK MOD 7 ist der Tabellenwert je Monat)
Jan (0), Feb (3), März (2), Apr (5), Mai (0), Juni (3), Juli (5), Aug (1), Sept (4), Okt (6), Nov (2), Dez (4)
Gregorianischer Kalender: Die folgende Formel gilt für das Datum ab 15.10.1582, wenn der neue Kalender in dem Land gültig war.
WoTag = (Tag + MK + RJ + RJ / 4 – RJ / 100 + RJ / 400 ) MOD 7 ' Wochentag bei Datum Gregorianisch
Julianischer Kalender: Die folgende Formel gilt immer für Datum vor 15.10.1582 und weiterhin für Datum nach Julianischem Kalender.
WoTag = (Tag + MK + RJ + RJ / 4 – 2 ) MOD 7 ' Wochentag bei Datum Julianisch
(6) Weitere Lösung: Wochentag vom Monatsende (zu Formel 5)
Die folgenden Formeln entstehen, indem Tag = 0 und der Folgemonat (Monat +1) in obige Formeln eingesetzt werden.
MKL = (1 + (Monat + 10) MOD 12) * 31 / 12 ' Monats-Konstante für Monatsende errechnen
LetzterWoTag = ( MKL + RJ + RJ / 4 – RJ / 100 + RJ / 400 ) MOD 7 ' Letzter Wochentag für beliebigen Monat (gregorianisch)
(7) Beispiele Wochentag berechnen mit Formeln (5)
Bei der Umstellung vom Julianischen auf Gregorianischen Kalender folgte auf Donnerstag, 4.10.1582 der Freitag, 15.10.1582.
Die Wochentagsfolge blieb damals erhalten. Fälschlicherweise wird oft behauptet, dass Tage mit Datum 5.10. bis 14.10.1582 nicht existieren. Tatsächlich gehören diese Tage zum Julianischen Kalender.
Galileo wurde am 18.2.1564 (Julianisch) geboren und starb am 8.1.1642 (gregorianisch). Nach Julianischem Kalender starb er im Jahre 1641, weil damals die Differenz zwischen den Kalendern 10 Tage betrug.
Beispiel 1: Galileo musste am 22.6.1633 (Datum nach 1582, also Gregorianischer Kalender) der Tatsache abschwören, dass sich die Erde um die Sonne dreht.
MK = (13* 6 +8) / 5 = 86 / 5 = 17 (Ganzzahl)
WoTag = (22 + 17 + 1633 + 1633/4 –1633/100 + 1633/400 ) MOD 7
= (22+17+1633+ 408 – 16 + 4) MOD 7 = 2062 MOD 7 = 3 ' Es war Mittwoch 22.6.1633.
An diesem Tag rettete er sich mit der Notlüge vor Folter und Tod. „Und sie dreht sich doch“ wird er gedacht haben. 360 Jahre später 1992 wurde er rehabilitiert und hat endgültig gesiegt.
Beispiel 2: Reformator Dr. Martin Luther, Anschlag der 95 Thesen an die Tür der Schlosskirche in Wittenberg am 31.10.1517 (Datum vor 1582, also Julianischer Kalender).
MK = (13*10+8)/5 = 138 /5 = 27 (Ganzzahl)
WoTag = ( 31 + 27 +1517 +1517 / 4 – 2 ) MOD 7 = 1952 MOD 7 = 6 ' Es war Samstag 31.10.1517
Wie andere Festtage z.B. 24.12. sind Allerheiligen und Reformationstag an das Datum gekoppelt unabhängig vom Julianischen oder Gregorianischen Kalender.
(8) Weitere einfache Berechnung des Wochentags aus Tag, Monat und Jahr für alle Jahrhunderte
JF = 3 / (Monat +1) ' Schalter Jan Feb = 1, sonst = 0
JF = (14 – Monat) / 12 ' andere Möglichkeit für Schalter Jan Feb = 1,
RJ = Jahr – JF ' Rechenjahr ist Vorjahr bei Jan Feb, sonst Jahr
MK = (1 + (Monat + 9) MOD 12) * 31 / 12 ' Monats-Konstante errechnen
MK = (13 * Monat + 8) / 5 + JF * (Monat +2) ' Alternative
MK = (Monat – 2) *31 / 12 +JF * (Monat +1) ' Alternative
MK = (Monat – 2 + 12*JF) *31 / 12 ' Alternative
MK = (13 * (Monat + 12*JF) +8) / 5 ' Alternative
WoTag = (Tag + MK + RJ + RJ/4 – RJ/100 + RJ/400 ) MOD 7 ' Wochentag 0 bis 6 bei Datum Gregorianisch
WoTag = (Tag + MK + RJ + RJ / 4 – 2 ) MOD 7 ' Wochentag 0 bis 6 bei Datum Julianisch
(9) Beispiel für Kalender-Wochentag 1 bis 7 (Montag bis Sonntag)
MK = (13 * (Monat + 12*JF) + 3) / 5 ' Monatskonstante ist um 1 vermindert
TagKW = (Tag + MK + RJ + RJ/4 – RJ/100 + RJ/400 ) MOD 7 +1 ' Wochentag 1 bis 7 bei Datum Gregorianisch
TagKW = (Tag + MK + RJ + RJ / 4 – 2 ) MOD 7 +1 ' Wochentag 1 bis 7 bei Datum Julianisch
(10) Umrechnen vom Julianischen zum Gregorianischen Datum (und umgekehrt), Berechnen der Differenz
Für Datum vor 15.10.1582 gilt immer der Julianische Kalender, aber auch für spätere Daten, soweit in Ländern der Gregorianische Kalender später gültig wurde.
Die Schaltjahrregel wurde damals geändert, wodurch das Datum der beiden Kalender vom 1.3. 200 bis 28.2. 300 identisch blieb, jedoch davor und danach über die Jahrhunderte immer mehr von einander abweicht.
Rechenjahr RJ (siehe oben) ist für Datum im Januar / Februar das Vorjahr (= Jahr –1). Erreicht das errechnete Datum März, dann wird mit dem aktuellen Jahr gerechnet.
Dies wirkt sich nur am Anfang eines Jahrhunderts aus (z.B. RJ = 1899 für Datum bis 28.2.1900). Der Term 3 / (Monat +1) ist nur Januar und Februar = 1.
RJ = Jahr – 3 / (Monat +1) ' Rechenjahr ist Vorjahr bei Jan Feb, sonst Jahr, weil das Schaltjahr erst ab 1. März wirkt.
Tagesdifferenz = RJ / 100 – RJ / 400 – 2
Die Tagesdifferenz muss zum Julianischen Datum addiert werden, um das Gregorianische Datum zu erhalten. (Wochentag bleibt gleich)
oder muss zum Wochentag vom Gregorianische Datum addiert werden, um den Wochentag im Julianischen Datum zu erhalten (Datum bleibt gleich).
Wozu dient der feste Wert 2 bei der gregorianischen Reform des Kalenders?
Genial wurden die Anzahl der Tage ab dem Jahr 0001 so geändert, dass der Rest bei Division durch 7 immer den Wochentag ergibt.
Wochentag vom Jahrestag = (Anzahl aller Tage ab Jahr 1) MOD 7 (Beispiel siehe Wochentag 8.1)
Einfache Formeln erhält man durch mathematisches Umformen.
Auch hier muss Anfang des Jahrhunderts beachtet werden (z.B. RJ = 1899 für Datum bis 28.2.1900).
Für die Jahrhundertzahl gilt HZ = RJ / 100 (z.B. für 1983 ist HZ =19):
Tagesdifferenz = (3 * HZ +3) / 4 – 2
Für das Jahrhundert gilt JH = 1 + RJ / 100 (z.B. 1983 liegt im 20. Jahrhundert, JH = 20)
Tagesdifferenz = 3 * JH / 4 – 2
Beispiel: In Russland galt der Julianische Kalender bis 1918. Die vom deutschen Kaiser finanzierte Oktoberrevolution in Russland begann am 25.10.1917 (Mittwoch).
Tagesdifferenz = 1917 / 100 – 1917 / 400 – 2 = 19 – 4 – 2 = 13 Tage
oder mit Jahrhundertzahl 1917 / 100 = 19 ergibt Tagesdifferenz = (3*19 +3) / 4 –2 = 13
oder mit 20. Jahrhundert 1917 / 100 + 1 = 20 ergibt Tagesdifferenz = 3*20 / 4 –2 = 13
Tag = 25 + 13 = 38. Wegen der Monatsüberschreitung werden 31 Tage für Oktober abgezogen 38 – 31 = 7 und der Monat erhöht.
In Deutschland datiert dieses Ereignis auf den 7.11.1917 des gregorianischen Kalenders (Mittwoch). Geändert hat sich nur das Datum; der Wochetag bleibt bestehen.
Geschichtsdaten wie der 30-jährige Krieg 1618 bis 1648 werden nach dem heute gültigen gregorianischen Kalender datiert, obwohl viele der Krieg führenden Länder den Julianischen Kalender benutzten.
9) Osterdatum und bewegliche Feiertage berechnen
Ostern ist ein beweglicher Feiertag. Tag und Monat also das Datum im Jahr wird hier mit Formeln errechnet.
Achtung, hier müssen Ganzzahl-Division (Kommastellen fallen weg) und Divisions-Rest (MOD) angewendet werden, z.B. 2009 MOD 19 = 14 bedeutet 2009 / 19 = Rest 14.
Ausgehend von verschiedenen Lösungen (unbekannter Autor 1876, Butcher , Carter, Oudin, Gauss, Dr. Lichtenberg) habe ich einen einfachen Rechengang (siehe 9.4) Einfache Berechnung für Ostersonntag) für die Jahre 1900 bis 2199 (gregorianischer Kalender) gebildet. Anschließend habe ich auch meinen allgemeinen Algorithmus für alle Jahrhunderte angefügt und bis zum Jahr 25599 getestet.
Vorteilhaft ist dabei der errechnete Bezugswert für alle Ostertermine. Mit dieser Osterkennzahl E wird direkt Ostertag und Monat berechnet.
Mit meiner Osterkennzahl E wird auch sehr einfach das jeweilige Datum (Tag und Monat) der anderen variablen Feiertage einschließlich Buß- und Bettag, Advent, Muttertag und sogar die Sommerzeit bestimmt.
Auch der Wochentag von Weihnachten, Silvester, usw. kann damit sehr einfach errechnet werden.
Diese Berechnungsmethode ist vorteilhaft, weil Schaltjahre bereits in der Osterberechnung enthalten sind.
9.1) Osterkennzahl E mit dem Jahrestag von Ostersamstag errechnen
Tag mit Osterkennzahl = 1 ist der 1. Dezember des Vorjahres auch bei Schaltjahren und entspricht damit dem Kirchenjahr, das am Vorabend des 1. Advents beginnt.
Die Osterkennzahl E ist der Jahrestag von Ostersamstag (Tag-Nr) plus 31 Tage plus 3 bzw. 2 Tage wegen Februar (evt. Schaltjahr SJ).
Osterkennzahl E = TagNr. + 34 – SJ
Beispiel: Ostersonntag ist der 24.4. 2011. Ostersamstag 23.4. hat die Tag-Nummer 113. (Kontrolle: Januar 31 + Februar 28 + März 31 + April 23 = 113)
Osterkennzahl E = 113 +34 = 147 für das Jahr 2011. Schaltjahr entfällt im Jahr 2011. ,
9.2) Osterberechnung umformen in Datum Ostersonntag und Monat Osterkennzahl E errechnen
Andere Osterberechnungen z.B. nach Gauß liefern als Ergebnis das Märzdatum beispielsweise Z = 32 statt eines Datums bestehend aus Tag und Monat. Es muss noch umgeformt werden.
(1) Die Zahl Z = 32 für den 1. April ergibt mit 32 MOD 31 = 1 nur scheinbar ein Ergebnis, denn 31 MOD 31 = 0 für den 31. März wäre falsch.
Deshalb wird umgeformt: Z MOD 31 (= 0 bis 30) wird zu Ostersonntag = (Z – 1) MOD 31 + 1 (= 1 bis 31)
Nun stimmt der Tag für 31. März (31–1) MOD 31 +1 = 31 und bei Z = 32 für 1. April bleibt das richtige Tagesdatum bestehen (32 –1) MOD 31 +1 = 1
Jetzt fehlt noch die Berechnung des Monats. Für 22. bis 31. März ergibt Z / 32 = 0 und für 1. April (Z = 32) ergibt Z / 32 = 1. Monat = 3 + Z / 32 ergibt März oder April.
(2) Eine andere Lösung ist einfach : Ostermonat = 3 + Z / 32 und Ostersonntag = Z MOD 32 + Z / 32
(3) Besser ist bei Z (hier Z = 22) ein Vielfaches des Divisors (3*31= 93) beizufügen ohne das Ergebnis bei Modulo 31 zu verändern: (22 –1 + 93) MOD 31 +1 = 22
Dabei ergibt die Ganzzahldivision die richtige Monatszahl (22 –1 +93) / 31 = 3 für Ostern am 22. März sowie (32 –1 + 93) / 31= 4 für Ostern am 1. April.
Das Ergebnis einer Osterberechnung (z.B. nach Gauß) nenne ich hier Märzdatum Z. Daraus wird meine Osterkennzahl E = Z + 92 gebildet und hierauf beruhen die einfachen Formeln:
Ostersonntag = 1 + E MOD 31 Ostermonat = E / 31
Datum Totensonntag im November Tag = 20 + E MOD 7 oder Wochentag Heiligabend WoTag = 6 – E MOD 7
Mit dieser Osterkennzahl E können die Termine anderer beweglicher Feiertage z.B. Pfingsten und sogar Advent, Weihnachten und vieles mehr nach meiner Methode ebenfalls sehr einfach berechnet werden.
9.3) Osterkennzahl E mit bekanntem Osterdatum errechnen
Falls das Osterdatum in einer Anwendung bekannt ist, kann die Osterkennzahl aus dem Datum errechnet werden.
Schaltjahre sind in der Osterkennzahl bereits berücksichtigt. Andere Festtage und Sondertage sind einfach zu berechnen
Für Tag = Ostersonntag sowie Monat = Ostermonat ist die Osterkennzahl E = (Tag –1) + Monat * 31
Beispiel: Ostern am 8.4.2012 ergibt Osterkennzahl E = (8 –1) + 4 * 31 = 131
Anwendung für beweglichen Feiertag: Tag = 16 + E MOD 7 ist der Buß- und Bettag, Tag = 16 + 5 = 21. November 2012
9.4) Einfache Berechnung für Ostersonntag (hier wird die Osterkennzahl direkt mit Jahr berechnet)
JAHR (4-stellig) 1900 bis 2099 mit Ergänzung bis 2199 (alle Jahrhunderte siehe 9.9)
A = ( 204 – JAHR MOD 19 *11 ) MOD 30 ' (Jahr 4-stellig)
B = 120 + A – A / 27 ' mit Ergänzung für Jahre 1954, 1981, 2049 und 2076
C = ( B + JAHR * 5 / 4 – JAHR / 2100 ) MOD 7 ' mit Ergänzung gültig bis 2199
E = B – C ' E Osterkennzahl (Easter index), Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum Tag)
Monat = E / 31 ' Ostermonat (Monat)
Wert A kann auch entsprechend Gauß berechnet werden
A = ( JAHR MOD 19 *19 + 24 ) MOD 30 ' (Jahr 4-stellig)
Wert C kann auch mit der Jahrhundertregel der Schaltjahre erweitert werden
C = ( B + JAHR * 5 / 4 – JAHR / 100 +Jahr / 400 + 1 ) MOD 7 '. Ergänzung gültig für 1894 bis 2203
Erläuterung zu meiner Osterformel (siehe auch Erläuterung bei den nächsten Algorithmen):
Der Wochentag C leitet sich von der allgemeinen Wochentagsformel ab [siehe 8.2 (2)].
WoTag = (Tag + KT + Jahr + Jahr / 4 – Jahr/100 + Jahr / 400) MOD 7
Tag des Oster-Vollmonds ist 21. März + A , wobei A die Anzahl der Tage bis Vollmond ist.
KT ist für März = 2 und (– Jahr/100 + Jahr / 400) = -15
C = (21 + A + 2 + Jahr*5/4 – 15) MOD 7 = (8 + A + Jahr*5/4 ) MOD 7
8 MOD 7 = 1 = 120 MOD 7
C = ( 120 + A + Jahr*5/4 ) MOD 7 ' Wochentag zu A (Vollmond)
Beispiel Jahr 2016
A = ( 204 – JAHR MOD 19 *11 ) MOD 30 2016 MOD 19 = 2 ' Rest von Division 2016 / 19
A = ( 204 – 2 *11 ) MOD 30 = (204 – 22) MOD 30 = 2 ' Rest von Division 182 / 30
B = 120 + A – A / 27
B = 120 + 2 – 2 /27 = 122
C = ( B + JAHR * 5 / 4 ) MOD 7 2016 *5 / 4 = 2520
C = ( 122 + 2520) MOD 7 = 3 (= Mittwoch Ostervollmond)
E = B – C = 122 – 3 = 119 ' E Osterkennzahl für 2016
Tag = 1+ E MOD 31 ' Ostersonntag (Datum Tag)
Tag = 1+ 119 MOD 31 = 1+ 26 = 27
Monat = E / 31 ' Ostermonat (Monat)
Monat = 119 / 31 = 3 Ostersonntag ist am 27.3.2016
9.5) Der früheste Ostertermin
kann mit den Formeln bestimmt werden. In obiger Formel kann A durch MOD 30 minimal = 0 werden.
B = 120 + A ' = 120
und C muss den größtmöglichen Wert annehmen. Der kann durch MOD 7 maximal =6 sein.
C = ( B + JAHR * 5 / 4) MOD 7 ' = 6
E = B – C ' E Osterkennzahl niedrigster Wert 120 – 6 = 114
Tag = 1+ E MOD 31 ' frühester Ostersonntag (Datum Tag) = 1 + 114 MOD 31 = 1 + 21 = 22. März
Anmerkung: Den frühest möglichen Ostertermin gibt es in diesem Jahrhundert nicht. Frühester Termin ist am 23.3.2008.
9.6) Der späteste Ostertermin
Der Wert A kann durch MOD 30 maximal = 29 betragen. C kann minimal = 0 sein.
B = 120 + 29 –29 /27 = 120 +29 –1 = 148
E = B – C ' E Osterkennzahl höchster Wert 148 – 0 = 148
Tag = 1+ E MOD 31 ' spätester Ostersonntag (Datum Tag) = 1 + 148 MOD 31 = 1 + 24 = 25. April
Anmerkung: Der späteste Ostertermin in diesem Jahrhundert ist am 25.4.2038
9.7) Berechnung Ostern Julianischer Kalender
(1) JAHR (4-stellig) bis 1582. Die Berechnung ist auch ab 1583 gültig, wenn der Julianische Kalender gültig blieb.
z.B. für Griechenland gültig bis 1922, griechische Ostern ab1923 siehe (2).
H = Jahr MOD 19 ' Mondparameter (H +1= Goldene Zahl)
A = (15 + H *19) MOD 30 ' Anzahl Tage ab 21. März bis Vollmond
C = (A + Jahr + Jahr / 4 ) MOD 7 ' Wochentag zu A (Vollmond)
E = 120 + A – C ' E Osterkennzahl (Easter index)
Tag = 1+ E MOD 31 ' Julianischer Ostersonntag (Datum Tag)
Monat = E / 31 ' Ostermonat (März oder April)
Z = 28 + A – C ' alternativ Ostersonntag als Märzdatum (21+A +7 – C)
Monat = 3 + Z / 32 ' Ostermonat (März oder April)
Tag = Z MOD 32 + Monat / 4 ' Ostersonntag
(2) JAHR (4-stellig) Orthodoxer Ostertermin (z.B. gilt in Griechenland ab 1923 der gregorianische Kalender).
Ostern wird julianisch berechnet, aber das Datum wird gregorianisch angegeben (griechisch, orthodox).
k = Jahr / 100 – Jahr / 400 –2 ' k ist Differenz in Tagen, Julianischer und gregorianischer Kalender
H = Jahr MOD 19 ' Mondparameter (H +1= Goldene Zahl)
A = (15 + H *19) MOD 30 ' Anzahl Tage ab 21. März bis Vollmond (julianisch)
C = (A + Jahr + Jahr / 4 ) MOD 7 ' Wochentag zu A (Julianisch) (21 MOD 7 = 0)
E = 120 + A + k – C ' E Osterkennzahl (Easter index), Erläuterung siehe unten
G = E + E / 154 ' (E/154 überspringt fehlenden 31.4.)
Tag = 1+ G MOD 31 ' Griechisch - Orthodoxer Ostersonntag (Datum Tag)
Monat = G / 31 ' Ostermonat (April oder Mai)
Z = 28 + A + k – C ' alternativ Ostersonntag als Märzdatum (- März 31, - April 30 Tage)
Monat = 3 + Z / 31 ' Ostermonat (April oder Mai)
Tag = Z MOD 31 + Monat / 5 ' Ostersonntag
Erläuterung zu meiner Osterformel (siehe auch Erläuterung bei den nächsten Algorithmen):
Der Wochentag blieb bei der gregorianischen Reform gleich.
Mit der Tagesdifferenz k zwischen den beiden Kalendern (anfangs 10, zur Zeit 13 Tage) verschiebt sich nur das Datum.
In die julianische Wochentagsformel (siehe 8.2) WoTag = ( Tag + KT + Jahr + Jahr / 4 – 2 ) MOD 7 wird KT = 2 für März eingesetzt.
Frühester Ostersonntag ist 22. März + 10 Tage minimale Differenz gregorianisch- julianisch = 32. März, d.h. –31 Tage für März = 1. April.
Mit der Osterkennzahl E können die beweglichen Feiertage berechnet werden (siehe unten).
9.8) Ostern Gregorianischer Kalender für alle Jahrhunderte
JAHR (4-stellig) ab 1583 ... bzw. 5-stellig (255 Jahrhunderte getestet)
k = Jahr / 100 – Jahr / 400 –1 ' k –1 ist Differenz in Tagen, Julianischer und gregorianischer Kalender (Schaltregel)
M = 16 + k – (Jahr / 100 * 8 +13) / 25 ' M säkulare Mondschaltung
H = Jahr MOD 19 ' Mondparameter (H +1= Goldene Zahl)
A = (M + H *19) MOD 30 ' Anzahl Tage ab 21. März bis Vollmond
T = (A + H / 11) / 29 ' Osterregel Osterausnahmen z.B. Jahre 1954, 1981, 2049, 2076, ....
B = 120 + A – T ' Osterkennzahl 120 entspricht 27. März = spätester 1. Samstag ab 21. März.
C = ( B + Jahr + Jahr / 4 – k ) MOD 7 ' Wochentag Ostervollmond.
E = B – C ' E Osterkennzahl (Easter index), Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum Tag)
Monat = E / 31 ' Ostermonat (Monat)
Alternativ kann auch die Formel C = (B + 5 * Jahr / 4 – k ) MOD 7 benutzt werden.
Je nach System wird aber bei 5 * Jahr der zulässige Zahlenraum z.B. 32676 überschritten, dann gilt nur 1583 bis 6553.
Alternativ kann auch M = 16 + k – Jahr / 300 angewendet werden, gültig für Jahre 1583 bis 4199.
Mondschaltung – Jahr / 300 stammt von Gauss (1800).
Erläuterung zu meiner Osterformel (siehe auch Erläuterung bei den nächsten Algorithmen):
Ostern ist definiert als der erste Sonntag ab Vollmond nach Frühlingsanfang (21. März). Abweichend berechnet meine Methode den Ostersamstag.
Der Grundwert 120 bei B wurde von mir gewählt, um den Ostermonat März bzw. April bei Division durch 31 zu erhalten, wobei der Rest das Datum von Ostersamstag (= Karsamstag) ergibt.
Am Ende der Osterberechnung wird 1 Tag addiert und man erhält das Datum des Ostersonntags. Dadurch ist das Problem mit Rest gleich Null bei Division gelöst.
Je nach Jahr liegt ein Samstag auf dem 21. bis 27. März. Der 27. März wäre spätester Samstag. Hieraus entsteht der Grundwert = 3*31 + 27 = 120.
Dieser Wert ist der erweiterte Jahrestag vom 27. März ab 1. Dezember [siehe 8.1 (2)], der um A (= Anzahl Tage vom 21. März bis zum nächsten Vollmond) erhöht wird (= B).
Der späteste Tag bewirkt, dass der Ostersonntag davor liegt. Dies hat den Vorteil, dass der berechnete Wochentag C von B abgezogen werden kann.
Hier folgt nun die Ableitung der Formel. In die allgemeine Wochentagsformel mit Jahrestag-Nummer wird der Jahrestag von B +1 eingesetzt.
Der Tag des Vollmonds ist 21 + A. Weil B dem Jahrestag vom 27. März entspricht, muss der Wochentag 28. März (= 21) März bestimmt werden, also von B+1.
WoTag = (TagNr – 1 – SJ + Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400) MOD 7 ' Wochentag , allgemeine Wochentagsformel, siehe oben 8.1(2)
B hat die TagNr = B –31 –3 + SJ ' wegen – 31 Tage Dezember und – 3 Tage Februar, siehe auch 3(9)
WoTag = (B +1 –31 –3 + SJ – 1 – SJ + Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400) MOD 7 ' dabei entfällt (–31 –3 + SJ – 1 – SJ ) MOD 7 = 0
WoTag = (B +1 + Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400) MOD 7 ' Wochentag 0 bis 6 (So, Mo, Di, Mi, Do, Fr, Sa)
C = ( B + Jahr + Jahr / 4 – k ) MOD 7 ' Wochentag 0 bis 6 des Ostervollmonds.
Mit k = Jahr / 100 – Jahr / 400 –1 wird der Tag B um – –1 = +1 erhöht.
Bei der Berechnung von M mit k habe ich wegen –1 den Zahlenwert von 15 auf 16 erhöht.
Die Korrektur für M (Jahr / 100 * 8 +13) / 25 findet sich bei Dr. Gauss (1816).
Der Term für die Ausnahmen der Osterregel T = (A + H / 11) / 29 stammt von Dr. Hermann Kinkelin (ca. 1870, vgl. Berechnung des Christlichen Osterfestes , Seite 226).
Bei B und C wird T subtrahiert. Durch B – C hebt sich das auf, außer bei C = 0. Dann wird C = 6 und E = B – C wird B –1 – 6 (7 Tage früher).
9.9) Berechnung Ostersonntag für alle Jahrhunderte ab 1583 bis.... (kürzere Variante)
JAHR (4-stellig) ab 1583 ... bzw. 5-stellig (255 Jahrhunderte getestet)
k = Jahr / 100 – Jahr / 400 + 195 ' k erhöht, 195 MOD 30 = 15 für M bzw. A, 195 MOD 7 = 6 für C
M = k – (Jahr / 100 * 8 +13) / 25 ' M erhöht, ohne Einfluss bei A wegen 180 MOD 30 = 0
H = Jahr MOD 19 ' Mondparameter (H +1= Goldene Zahl)
A = (M + H *19) MOD 30 ' Anzahl Tage ab 21. März bis Vollmond
T = (A + H / 11) / 29 ' Osterregel Osterausnahmen z.B. Jahre 1954, 1981, 2049, 2076, ....
B = 120 + A – T ' Osterkennzahl 120 entspricht 27. März = spätester 1. Samstag ab 21. März.
C = ( B + Jahr + Jahr / 4 – k ) MOD 7 ' Wochentag Ostervollmond
E = B – C ' E Osterkennzahl (Easter index), Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum Tag)
Monat = E / 31 ' Ostermonat (Monat)
Weitere Erläuterung zu meinen Osterformeln:
Im Wert M kann die Zahl 15 vollständig in k enthalten sein. Dafür wird die Zahl in k auf 195 erhöht.
Hieraus ergibt sich: A = (k + ..) MOD 30 bleibt unverändert wegen 195 MOD 30 = 15.
In der Wochentagsformel (mit Jahrestagnummer) ergibt C = k MOD 7 = 195 MOD 7 = 6, wegen -k ergibt – 6 +7 = +1 die notwendige Erhöhung um 1.
9.10) Berechnung Ostersonntag für alle Jahrhunderte ab 1583 bis.... (hier wird alternativ das Märzdatum berechnet)
JAHR (4-stellig) ab 1583 ... bzw. 5-stellig (255 Jahrhunderte getestet)
k = Jahr / 100 – Jahr / 400 –2 ' k ist Differenz in Tagen, Julianischer und gregorianischer Kalender (Schaltregel)
M = 17 + k – (Jahr / 100 * 8 +13) / 25 ' M säkulare Mondschaltung
H = Jahr MOD 19 ' Mondparameter (H +1= Goldene Zahl)
A = (M + H *19) MOD 30 ' Anzahl Tage ab 21. März bis Vollmond
T = (A + H / 11) / 29 ' Osterregel Osterausnahmen z.B. Jahre 1954, 1981, 2049, 2076, ....
B = 28 + A – T ' Datum Vollmond + 7 Tage
C = ( B + Jahr + Jahr / 4 – k ) MOD 7 ' Wochentag Ostervollmond
Z = B – C ' Ostersonntag als Märzdatum (32. März = 1. April)
Monat = 3 + Z / 32 ' Ostermonat (Monat)
Tag = Z MOD 32 + Z / 32 ' Ostersonntag (Datum Tag)
Alternativ kann auch die Osterkennzahl gebildet werden.
E = 92 + B – C ' E Osterkennzahl (Easter index), Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum Tag)
Monat = E / 31 ' Ostermonat (Monat)
Erläuterung zu dieser Osterformel:
Ostern ist definiert als der erste Sonntag nach Vollmond ab Frühlingsanfang (21. März) also frühestens 22. März.
Die Anzahl Tage vom 21. März bis zum nächsten Vollmond ist A, + 21 ist das Datum vom Vollmondtag.
Da Ostersonntag nach dem Vollmondtag liegen muss, werden 7 Tage addiert (B = 21+7 +A).
Bei der Berechnung des Wochentags vom Vollmondtag (= C) wirkt sich dies nicht aus, wegen 21 MOD 7 = 28 MOD 7 = 0.
Vorteilhaft ist, dass der berechnete Wochentag zu B ( C = 0 bis 6 = So bis Sa) direkt abgezogen werden kann, um Ostersonntag als Märzdatum zu erreichen.
Hier folgt nun die Ableitung der Formel. In die allgemeine Wochentagsformel wird das Datum (Tag = B und Monatswert KT = 2 für März) eingesetzt.
WoTag = ( Tag + KT + Jahr + Jahr / 4 – Jahr/100 + Jahr / 400 ) MOD 7 ' Wochentag , allgemeine Wochentagsformel siehe oben 8.2 (2)
WoTag = (B + 2 + Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400) MOD 7 ' Wochentag 0 bis 6 (So, Mo, Di, Mi, Do, Fr, Sa)
C = ( B + Jahr + Jahr / 4 – k ) MOD 7 ' Wochentag = Anzahl Tage für den Abstand zu Sonntag davor.
Mit k = Jahr / 100 – Jahr / 400 –2 ist die Tagesdifferenz um – –2 = +2 erhöht und ersetzt KT = 2 für März.
Bei der Berechnung von M mit k habe ich wegen –2 den Zahlenwert von 15 auf 17 erhöht.
Die Differenz Julianischer und gregorianischer Kalender kann auch umgeformt werden, siehe 8.2 (10):
k = (Jahr / 100 * 3 +3) / 4 – 2
Alternativ kann N = Jahr / 100 in k und M eingesetzt werden. Weitere Erläuterungen siehe Osterformel davor.
9.11) Berechnung Ostersonntag für alle Jahrhunderte ab 1583 bis.... (hier eine kürzere Alternative)
JAHR (4-stellig) ab 1583 ... bzw. 5-stellig (255 Jahrhunderte getestet)
k = Jahr / 100 – Jahr / 400 – 2 ' k ist Differenz in Tagen, Julianischer und gregorianischer Kalender (Schaltregel)
M = 17 + k – (Jahr / 100 * 8 +13) / 25 ' M säkulare Mondschaltung
H = Jahr MOD 19 ' Mondparameter (H +1= Goldene Zahl)
A = (M + H *19) MOD 30 ' Anzahl Tage ab 21. März bis Vollmond
B = A – (A + H / 11) / 29 ' 0. März + Anzahl Tage minus Osterausnahme.
C = ( B + Jahr + Jahr / 4 – k ) MOD 7 ' Wochentag Ostervollmond
E = 120 + B – C ' E Osterkennzahl (Easter index), Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum Tag)
Monat = E / 31 ' Ostermonat (Monat)
Weitere Erläuterung zu meinen Osterformeln:
Siehe auch Erläuterungen zu obigen Osterformeln. Der Tag 21. März entfällt in der Formel zur Berechnung des Wochentags C, wegen 21 MOD 7 = 0.
Der 0. März ist rechnerisch der gleiche Wochentag wie der 21. oder 28. März und gleich dem 28./29. Februar mit dem Vorteil, das Schaltjahr zu umgehen.
Mit 0. März entfällt in der Wochentagsformel der Tag, und der Monatswert 2 für März ist in k enthalten, siehe 8.2 (2).
9.12) Berechnung Ostersonntag für alle Jahrhunderte ab 1583 bis.... (weitere kürzere Alternative)
JAHR (4-stellig) ab 1583 ... bzw. 5-stellig (255 Jahrhunderte getestet)
k = Jahr / 100 – Jahr / 400 + 75 ' k erhöht, 75 MOD 30 = 15 und für C ergibt –k MOD 7 = -75 MOD 7 = 2
M = k – (Jahr / 100 * 8 +13) / 25 ' M erhöht, ohne Einfluss bei A wegen 60 MOD 30 = 0
H = Jahr MOD 19 ' Mondparameter (H +1= Goldene Zahl)
A = (M + H *19) MOD 30 ' Anzahl Tage ab 21. März bis Vollmond
B = A – (A + H / 11) / 29 ' 0. März + Anzahl Tage minus Osterausnahme.
C = ( B + Jahr + Jahr / 4 – k ) MOD 7 ' Wochentag Ostervollmond
E = 120 + B – C ' E Osterkennzahl (Easter index), Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum Tag)
Monat = E / 31 ' Ostermonat (Monat)
Weitere Erläuterung zu meinen Osterformeln:
Im Wert M kann die Zahl 15 vollständig in k enthalten sein. Dafür wird die Zahl in k auf 75 erhöht.
Hieraus ergibt sich: A = (k + ..) MOD 30 bleibt unverändert wegen 75 MOD 30 = 15.
In der Wochentagsformel (mit Datum) ergibt C = k MOD 7 = 75 MOD 7 = 5, wegen -k ergibt – 5 +7 = +2 die notwendige 2 für Monat März.
9.13) Kürzere Formeln , kleinere Zeiträume
Oben bei 9.4 stehen Algorithmen für die Jahre 1900 bis 2099 und erweitert bis 2199 sowie ein Bereich 1894 bis 2203.
(1) Hier folgt noch mein getesteter Algorithmus für 1887 bis 2325
k = Jahr / 100 –Jahr / 400 +195 ' k erhöht, 195 MOD 30 = 15 für M bzw. A, 195 MOD 7 = 6 für C
M = k – Jahr / 300 ' M säkulare Mondschaltung
A = (M + Jahr MOD 19 *19) MOD 30 ' Anzahl Tage ab 21. März bis Vollmond
B = 120 + A – A / 28 ' Osterkennzahl 120 entspricht 27. März = spätester 1. Samstag ab 21. März.
C = ( B + 5 * Jahr / 4 – k ) MOD 7 ' Wochentag Ostervollmond
E = B – C ' E Osterkennzahl (Easter index), Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum Tag)
Monat = E / 31 ' Ostermonat (Monat)
(2) Variante meiner Osterberechnung mit Tabellenzugriff gültig für 1900 bis 2099 (2199)
A = Jahr MOD 19 ' Zugriff auf Tabellenposition A = 0 bis 18
LookTAB Ostermond, A, B ' Die Variable B enthält nun den Wert erweiterter Jahrestag aus der Tabelle
C = ( B + Jahr + Jahr / 4 – Jahr / 2100 ) MOD 7 ' Wochentag für 1900 bis 2099 mit Ergänzung bis 2199
E = B – C ' E Osterkennzahl (Easter index), Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum Tag)
Monat = E / 31 ' Ostermonat (Monat)
Die zugehörige Tabelle mit dem erweitertem Jahrestag des Ostervollmonds (siehe auch oben).
Erweiterter Jahrestag B = 3*31 + Märztage + eventuell Apriltage.
Der auf diesem erweiterten Jahrestag folgende Sonntag ist der Ostersonntag.
Table Ostermond ' erweiterter Jahrestag
144 133 122 141 130 148 138 127 146 135 124 143 132 121 140 129 147 137 126
TABEND
(3) weitere Variante Osterberechnung mit Tabellenzugriff gültig für 1894 bis 2203
A = Jahr MOD 19 ' Zugriff auf Tabellenposition A = 0 bis 18
LookTAB Ostermond, A, B ' Die Variable B enthält nun den Wert Märztag (incl. April) +2 aus der Tabelle
C = ( B + Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400 ) MOD 7 ' Wochentag Ostervollmond
E = B – C + 97 ' E Osterkennzahl (Easter index), Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum Tag)
Monat = E / 31 ' Ostermonat (Monat)
Die zugehörige Tabelle mit dem Märzdatum des Ostervollmonds + 2 für KT = 2 (wegen Wochentag März).
B ist dadurch + 2 zu hoch. Dafür erfolgt der Ausgleich 92 – 2 +7 = 97.
Der auf dieses Märzdatum (mit April) folgende Sonntag ist der Ostersonntag.
Table Ostermond 'Märzdatum mit Verlängerung in den April
47 36 25 44 33 51 41 30 49 38 27 46 35 24 43 32 50 40 29
TABEND
Die Tabellenwerte können auch um 91 erhöht werden wegen 91 MOD 7 = 0, damit würde E = B – C + 6
Hinweis zu (2) und (3): Berücksichtigt ist, dass der Vollmond 7 Tage später liegt bei Osterausnahmen z.B. Jahre 1954, 1981, 2049, 2076
9.14) Berechnung der beweglichen Feiertage mit festen Abstand zu Ostern (gilt für alle Jahre)
Palmsonntag (-7), Gründonnerstag (-3), Karfreitag (–2), Ostermontag (+1), Dänischer Buß- und Bettag (Store Bededag) (+26), Himmelfahrt / Vatertag (+39), Pfingsten (+49) und Fronleichnam (+60) sind ebenfalls bewegliche Feiertage, weil sie an das Osterdatum gekoppelt sind.
D = 39 ' Beispiel Himmelfahrt / Vatertag (Distanz 39 Tage nach Ostern)
F = E + D ' Ostern (Easter) + Abstand (Distanz) des Feiertages
G = F + F / 154 ' G Kennzahl des gesuchten Tages
Tag = 1+ G MOD 31 ' Datum Tag des gesuchten beweglichen Feiertags
Monat = G / 31 ' Datum Monat
Anmerkung: F / 154 (ohne Kommastellen) überbrückt den fehlenden 31.4.
Beispiel Himmelfahrt 2016
F = 119 + 39 = 158
G = 158 + 158 / 154 = 158 + 1 = 159
Tag = 1 + 159 MOD 31 = 1 + 4 = 5
Monat = 159 / 31 = 5 Himmelfahrt ist am 5.5.2013
9.15) Berechnung der beweglichen Feiertage einschließlich Karnevalstage (gilt für alle Jahre)
Weiberfastnacht (-52), Rosenmontag (– 48), Aschermittwoch (– 46), Karfreitag (–2), Ostermontag (+1), Himmelfahrt (+39), Pfingsten (+49) und Fronleichnam (+60)
D = – 48 ' Beispiel Rosenmontag ( Distanz 48 Tage vor Ostern)
F = E + D 'Ostern (Easter) + Abstand (Distanz) des Feiertages
G = F + F / 154 – 92 / F * (3 – SJ) 'mit Ergänzung für Karnevalstage im Februar
Tag = 1+ G MOD 31 ' Datum Tag des gesuchten beweglichen Feiertags
Monat = G / 31 ' Datum Monat (G Kennzahl des gesuchten Tages und Monats)
SJ = 1 / (1+Jahr MOD 4) –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
Die Jahrhundertregel –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) kann bei Beschränkung auf 2001 bis 2099 weggelassen werden.
Anmerkung: 92 / F hat den Wert= 0 ab März, jedoch Februar den Wert= 1 (dies entspricht (F < 93)= wahr)
Damit werden für Februar 3 bzw. in Schaltjahren 2 Tage abgezogen.
Die Osterkennzahl beginnt am 1. Dezember mit 31 Tagen für jeden Monat. Der 1.3. hat damit den Wert 3*31=93.
'***********************************************************************************
Ergänzung am 11.10.2008 Das Jahr 2100 ist noch weit entfernt. Oder doch nicht?
Maximilian Alexander, Du sollst mit 91 Jahren nicht um 1 Tag zu spät den Rosenmontagszug verpassen.
Dir widme ich die Korrektur für Februar im Jahr 2100, das kein Schaltjahr ist.
'***********************************************************************************
9.16) Jahrestag von Ostersonntag und von beweglichen Feiertagen berechnen (fester Abstand zu Ostern)
TagNr = E – 33 + SJ + D ' Jahrestag von Ostersonntag (D = 0), Pfingstmontag (D = 50)
Beispiele:
Ostersonntag am 8.4. 2012 (Schaltjahr) hat die Osterkennzahl E = 131
TagNr = E – 33 + SJ +0 = 131 –33 +1 = 99
Pfingstmontag Tag-Nr = 131 –33 + 1 + 50 = 149
Kontrolle: Pfingstmontag am 28. Mai 2012 mit der Formel für Tagnummer im Jahr für März bis Dezember
TagNr = Tag + (153 * Monat –162) / 5 + SJ = 28 +(153 * 5 –162) / 5 +1 = 28 +120 +1 = 149
9.17) Datum zum Wochentag berechnen mit Osterkennzahl (oder mit Datum Ostersonntag)
für bewegliche Feiertage ohne festen Abstand zu Ostern (gilt für alle Jahre)
Im Folgenden liegt der Wochentag (Mittwoch, Sonntag, usw.) fest und es wird das zugehörige Datum (Tag) für bewegliche Feiertage und besondere Tage gesucht.
Wenn die Osterkennzahl durch die Berechnung von Ostern ohnehin bereits festliegt, dann ist sinnvoll auch andere Feiertage mit meinen folgenden Formeln zu bestimmen.
Auch mit dem Märzdatum OS (32. März = 1. April, usw.) kann das Datum dieser Feiertage berechnet werden.
Dabei ist das Jahr beliebig, weil es schon in der Osterkennzahl bzw. im Märzdatum berücksichtigt wurde. Auch Schaltjahre sind dabei schon berücksichtigt.
Die Osterkennzahl E (siehe oben) fertig berechnet: E= 115 für 2008, E= 135 für 2009, E= 127 für 2010, E = 147 für 2011, E = 131 für 2012, E = 123 für 2013, E = 143 für 2014, E= 128 für 2015, usw.
Die Osterkennziffer Ed = E MOD 7 (Rest nach Division durch 7) beträgt für 2008 (3), 2009 (2), 2010 (1), 2011 (0), 2012 (5), 2013 (4), 2014 (3), 2015 (2), 2016 (0), 2017 (6), ...
Die Osterkennziffer Ed folgt einem Gesetz –1 von Jahr zu Jahr und im Schaltjahr –2 . Wird die Zahl negativ, muss 7 addiert werden z.B. 2011 auf Schaltjahr 2012 (0 –2 +7 = 5).
Die Osterkennziffer Ed = E MOD 7 habe ich definiert, weil sie einfach in die Formeln eingesetzt werden kann. Bei (E + 2) MOD 7 wird Ed für E eingesetzt.
(1) mit dem Osterdatum (Osterkennzahl E oder Osterkennziffer E MOD 7)
Tag = 16 + E MOD 7 ' Datum Tag für Buß- und Bettag (Mittwoch) im November
Beispiel: Jahr 2013 beträgt E = 123 , Tag = 16 + 123 MOD 7 = 16 +4 = 20 (20. November)
(2) mit dem Märzdatum von Ostersonntag Z (auch OS genannt)
Weil E = Z + 92 ist, folgt E MOD 7 = (Z + 92) MOD 7 = (Z + 1) MOD 7 , und für E kann (Z+1) oder (OS +1) gesetzt werden. (beachte Z = 32 ist 1. April, usw.)
Tag = 16 + (OS +1) MOD 7 ' Datum Tag für Buß- und Bettag (Mittwoch) im November
Beispiel: Jahr 2013 ist Ostersonntag am 31. März, Tag = 16 + (31 + 1) MOD 7 = 16 +4 = 20 (20. November)
Tag = ... + (OS +1) MOD 7 ' alternative Formel für Datum Tag auch bei folgenden Feiertagen mit (OS +1) statt E .
Berechnung Datum Muttertag (mit Osterkennzahl E)
Tag = 8 + E MOD 7 ' Datum Tag für Muttertag (2. Sonntag) im Mai, bei E= 114 bis 118 fällt Muttertag auf Pfingsten
Tag = 8 + E MOD 7 – 118 / E *7 ' mit Korrektur auf 1. Sonntag im Mai (–7 Tage), wenn Pfingsten auf denselben Tag fällt.
Der Quotient 118 / E hat den Wert = 1, wenn die Osterkennzahl E = 114 bis 118 beträgt. Dann liegt Ostern auf 22. bis 26. März und Pfingsten auf dem 2. Sonntag im Mai 10. bis 14. Mai.
Tag = 1 + E MOD 7 + E / 119 *7 ' mit Korrektur auf 2. Sonntag im Mai (+7 Tage), wenn Pfingsten nicht auf denselben Tag fällt.
Berechnung Datum Sommerzeit Winterzeit (mit Osterkennzahl E oder Osterkennziffer E MOD 7)
Tag = 25+ ( E + 2 ) MOD 7 ' Datum Tag für Beginn Sommerzeit im März
Tag = 25+ ( E + 5 ) MOD 7 ' Datum Tag für Ende Sommerzeit im Oktober
Berechnung Datum Totensonntag und Volkstrauertag (mit Osterkennzahl E oder Osterkennziffer E MOD 7)
Tag = 20 + E MOD 7 ' Datum Tag für Totensonntag (Ewigkeitssonntag) im November
Tag = 13 + E MOD 7 ' Datum Tag für Volkstrauertag im November
Berechnung Datum Advent (mit Osterkennzahl E oder Osterkennziffer E MOD 7)
Wann fallen Heiligabend und 4. Advent zusammen?
Tag = 18 + E MOD 7 ' Datum Tag für 4. Advent im Dezember, 24.12.2017 bei Osterkennziffer =6
Tag = 11 + E MOD 7 ' Datum Tag für 3. Advent im Dezember
Tag = 4 + E MOD 7 ' Datum Tag für 2. Advent im Dezember
Tag = 1+ (26 + E MOD 7 ) MOD 30 ' Datum Tag für 1. Advent im Dezember / November
Monat = 12 – Tag / 27 ' Datum Monat zu Tag der Adventsonntage (Dezember / November)
Auf welche Wochentage fällt Weihnachten (Heiligabend), wenn der 1. Advent im November liegt?
Tag = 1+ (26 + E MOD 7 ) MOD 30 ergibt den Tag für 1. Advent am 27. bis 30. November bei E MOD 7 = 0 bis 3.
Der Wochentag Heiligabend 24.12. ist 6 – E MOD 7. Bei E MOD 7 = 0 bis 3 fällt der Wochentag auf 3 bis 6 = Mittwoch bis Samstag.
Frühestes und spätestes Datum der Feiertage
Beim frühesten Termin ist der Rest ... MOD 7 = 0. Der späteste Termin wird berechnet mit ... MOD 7 = 6.
9.18) Wochentag zu einem festen Datum berechnen mit Osterkennzahl , beweglicher Wochentag (gilt für alle Jahre)
Im Folgenden liegt das Datum fest und es wird der zugehörige Wochentag (Mittwoch, Sonntag, usw.) gesucht.
Mit Ostern wird hier der Wochentag z.B. von Weihnachten berechnet. Dabei ist das Jahr beliebig, weil es schon in der Osterkennzahl berücksichtigt wurde.
(1) Allgemein siehe auch bei Berechnung Wochentag (oben)
(2) Allgemein als Tag 0 bis 6 (So, Mo, Di, Mi, Do, Fr, Sa)
Tabellenwert je Monat, KT in Klammern:
Jan (6 – SJ), Feb (2 – SJ), März (2), Apr (5), Mai (0), Juni (3), Juli (5), Aug (1), Sept (4), Okt (6), Nov (2), Dez (4)
WoTag = 6 – ( E – Tag – KT ) MOD 7 ' Wochentag für beliebiges Datum
Beispiel: Valentinstag 14. Februar
WoTag = 6 – (E –14 – (2 – SJ)) MOD 7 = 6 – (E – 16 +SJ) MOD 7
Der Term wird noch umgeformt ( –16) MOD 7 = –2 mit +7 wird der Wert zu +5
Valentinstag: WoTag = 6 – ( E + 5 + SJ ) MOD 7 ' Formel gültig für alle Jahre
Beispiel: Valentinstag 14.2.2012 ( Osterkennzahl E = 131), SJ = 1 (Schaltjahr)
WoTag = 6 – (131 +5 +1) MOD 7 = 6 – 4 = 2 ( Dienstag 14.2.2012)
(3) Alternative Formeln mit der Osterkennzahl oder Osterkennziffer
Die Formel kann man auch umformen mit 6 – ( E + x ) MOD 7 = (6 * E + 6 – x ) MOD 7
WoTag = 6 – ( E + 5 + SJ ) MOD 7 = (6 * E + 6 –5 –SJ) MOD 7 '
Valentinstag: WoTag = (6 * E + 1 – SJ ) MOD 7 ' alternative Formel
(4) Wochentag vom Valentinstag 14.2. des nächsten Jahres
Schaltjahr SJ muss bei Januar/Februar nicht bei Rechnung mit Osterkennzahl des Vorjahres berücksichtigt werden, weil es in dieser Osterkennzahl bereits enthalten ist.
Valentinstag: WoTag = 6 – ( E + 4 ) MOD 7 ' Beispiel mit Osterkennziffer 2011 für 14.2.2012 = 6 – (0+4) MOD 7 = 2 =Dienstag
(5) Weitere besondere Tage mit festem Datum (beweglicher Wochentag). Diese Formeln sind abgeleitet aus obiger allgemeiner Formel.
Wochentag von Heiligabend 24.12. und Silvester 31.12. und niederl. Koninginnedag 30.4.
WoTag = 6 – E MOD 7 ' Wochentag Heiligabend 24.12. und 31.12. und 30.4.
Beispiel für 2012: Osterkennzahl E = 131, bzw. Osterkennziffer E MOD 7 = 5
WoTag = 6 – E MOD 7 = 6 –131 MOD 7 = 6 – 5 = 1 ' (24.12.2012 ist ein Montag).
Viele freie Tage gibt es immer bei Osterkennziffer = 5. Dann ist der 24.12. ein Montag, 6 –5 = 1 (Mo).
Bei Osterkennziffer = 6 ist der Wochentag = 0, dann ist der 24. Dezember Sonntag, der 4. Advent.
Wochentag vom 1. Weihnachtsfeiertag 25.12. oder Tag der Arbeit 1. Mai
WoTag = 6 – ( E + 6 ) MOD 7 ' Wochentag 1. Weihnachtstag 25.12. oder 1. Mai
WoTag = 6 * E MOD 7 ' alternative Formel für Wochentag 1. Weihnachtstag 25.12. oder 1. Mai
Formel mit Märzdatum OS vom Ostersonntag (siehe nächster Abschnitt)
WoTag = 6 – OS MOD 7 ' alternative Formel für Wochentag 1. Weihnachtstag 25.12. oder 1. Mai
Wochentag zu Nikolaus 6.12.
WoTag = 6 – ( E + 4 ) MOD 7 ' Wochentag Nikolaus am 6.12.
Wochentag zu Heilige Drei Könige 6.1.
WoTag = 6 – ( E + 1 ) MOD 7 Wochentag Heilige Drei Könige 6.1. im nächsten Jahr
Beispiel mit Osterkennziffer 2011: WoTag = 6 – (0 +1) MOD 7 = 5 = Freitag 6.1.2012
WoTag = 6 – ( E + 2 + SJ ) MOD 7 ' Wochentag Heilige Drei Könige 6.1. aktuelles Jahr
Beispiel mit Osterkennziffer 2012: WoTag = 6 – (5 +2 +1) MOD 7 = 5 = Freitag 6.1.2012
Wochentag vom Jahresanfang 1.1. des nächsten Jahres
WoTag = 6 – ( E + 6 ) MOD 7 ' Beispiel mit Osterkennziffer 2011 , Wochentag 1.1.2012 = 6 – (0+6 ) MOD 7 = 0 =Sonntag
WoTag = 6 * E MOD 7 ' alternative Formel, Wochentag 1.1.2012 = 6 *0 MOD 7 = 0 =Sonntag
Wochentag vom Jahresanfang 1.1. des aktuellen Jahres
WoTag = 6 – ( E + SJ ) MOD 7 ' Beispiel mit Osterkennziffer 2012 , Wochentag 1.1.2012 = 6 – (5 +1) MOD 7 = 0 =Sonntag
Der Niederländische Königinnentag liegt auf dem 30.4., aber falls Sonntag, dann Samstag z.B. 29.4.2017
WoTag = 6 – E MOD 7 + E MOD 7 / 6 * 6' weekdag Koninginnedag, falls =0, dann =6, Samstag 29.4.
(6) Jahre mit gleichem Datum und Wochentag
Datum und Wochentag sind gleich in Jahren mit gleicher Osterkennziffer, in Schaltjahren jedoch erst ab März.
zum Beispiel 2009 (2) und 2015 (2), nicht jedoch Januar und Februar 2011 (0) und 2016 (0 +SJ).
9.19) Wochentag zu einem festen Datum berechnen mit Märzdatum Ostersonntag , beweglicher Wochentag (gilt für alle Jahre)
Im Folgenden liegt das Datum fest und es wird der zugehörige Wochentag (Mittwoch, Sonntag, usw.) gesucht.
Mit Ostern wird hier der Wochentag z.B. von Weihnachten berechnet. Dabei ist das Jahr beliebig, weil es schon im Märzdatum von Ostersonntag berücksichtigt wurde.
Berechnung mit dem Märzdatum von Ostersonntag Z (auch OS genannt)
Weil E = Z + 92 ist, folgt E MOD 7 = (Z + 92) MOD 7 = (Z + 1) MOD 7, und für E kann (Z+1) oder (OS +1) gesetzt werden. (beachte Z = 32 ist 1. April, usw.)
Beispiel: Wochentag vom 1. Weihnachtsfeiertag 25.12. oder Tag der Arbeit 1. Mai
WoTag = 6 – ( E + 6 ) MOD 7, umformen (E+ 6) MOD 7 = (OS +1 +6) MOD 7 = OS MOD 7
WoTag = 6 – OS MOD 7 ' Wochentag 1. Weihnachtstag 25.12. oder 1. Mai
Alle obigen Formeln können umgewandelt werden, wenn mit OS statt E gerechnet werden soll.
9.20) Ostersonntag berechnen in Tabellenkalkulation z.B. Excel (statt Osterfunktion)
In folgenden Beispielen wird die 4-stellige Jahreszahl z.B. 2013 in Zelle A1 eingegeben. In eine beliebige andere Zelle wird die Formel kopiert.
Diese Zelle muss als Format Datum gewählt werden. Nach Eingabe 2013 in A1 wird das Datum 31.3.2013 angezeigt.
(1) Gültig für 1982 bis 2048
= DATUM (A1;3;28) + REST (24+REST (A1;19)*19;30) - REST ( GANZZAHL (A1*5 / 4) + REST (24+REST (A1;19)*19;30) +1 ;7)
Erläuterung: Die Formel addiert zum 28. März die Anzahl Tage vom 21. März bis Vollmond und der Wochentag des Vollmondes wird abgezogen.
Wenn am Samstag, den 21.3. Vollmond ist, dann ist 28 + 0 – 6 = 22. 3. der Ostersonntag (frühester Termin).
Wenn am Mittwoch, den 27.3. Vollmond ist, dann ist 28 + 6 – 3 = 31. 3. der Ostersonntag (im Jahr 2013).
(2) Gültig für 1900 bis 2099
= DATUM (A1;3;28) + REST (24+REST (A1;19)*19;30) - ( REST (24+REST (A1;19)*19;30) > 27) - REST ( GANZZAHL (A1*5 / 4) + REST (24+REST (A1;19)*19;30) - ( REST (24+REST (A1;19)*19;30) > 27) +1 ;7)
Erläuterung: Der Term – ( REST (24+REST (A1;19)*19;30) > 27) ist die Korrektur für die Osterausnahmen 1954, 1981, 2049, 2076.
(3) Gültig für 1900 bis 2199
= DATUM (A1;3;28) + REST (24+REST (A1;19)*19;30) - ( REST (24+REST (A1;19)*19;30) > 27) - REST ( GANZZAHL(A1*5/4) + REST (24+REST (A1;19)*19;30) - ( REST (24+REST (A1;19)*19;30) > 27) + (A1 < 2100) ;7)
Erläuterung: Der Term + (A1 < 2100) ersetzt +1 der anderen Formeln für 1900 bis 2099. Ab 2100 entfällt der Tag (kein Schaltjahr).
(4) Bewegliche Feiertage
In weiteren Zellen wird zum Datum von Ostersonntag der Abstand addiert, z.B. Himmelfahrt +39 Tage oder Rosenmontag – 48 Tage. (Format Zelle Datum einstellen)
(1) Berechnung Vollmond vor Ostern als Datum und Wochentag
Beispiel mit JAHR (4-stellig) 1900 bis 2099 (alle Jahrhunderte siehe 9.9)
A = ( JAHR MOD 19 *19 + 24 ) MOD 30 ' Anzahl Tage ab 21. März bis Vollmond (Jahr 4-stellig)
B = 120 + A – A / 27
C = ( B + JAHR * 5 / 4) MOD 7 ' Wochentag Ostervollmond
E = B – C ' E Osterkennzahl (Easter index)
Tag = 1+ E MOD 31 ' Ostersonntag (Datum Tag)
Monat = E / 31 ' Ostermonat (Monat)
V = 113 + A ' Kennzahl Ostervollmond
Tag = 1+ V MOD 31 ' Ostervollmond (Datum Tag)
Monat = V / 31 ' (Monat)
(2) Beispiel Jahr 2016
A = ( JAHR MOD 19 *19 + 24 ) MOD 30 2016 MOD 19 = 2 ' Rest von Division 2016 / 19
A = ( 2 *19 + 24 ) MOD 30 = (38 + 24) MOD 30 = 2 ' Rest von Division 62 / 30
B = 120 + A – A / 27
B = 120 + 2 – 2 /27 = 122
C = ( B + JAHR * 5 / 4 ) MOD 7 2016 *5 / 4 = 2520
C = ( 122 + 2520) MOD 7 = 3 (= Mittwoch)
V = 113 + 2 = 115 ' V Kennzahl Ostervollmond für 2016
Tag = 1+ V MOD 31 ' Ostervollmond (Datum Tag)
Tag = 1+ 115 MOD 31 = 1 + 22 = 23
Monat = V / 31 ' (Monat)
Monat = 115 / 31 = 3 Ostervollmond ist am 23.3.2016
Kontrolle: 21. März + A = 21 + 2 = 23
(3) Berechnung Ostervollmond als Märzdatum
( A siehe oben)
V = 21 + A
Tag = V – V / 32 * 31 ' im März bzw. April
Monat = 3 + V / 32
(4) Berechnung Ostervollmond als Tagnummer im Jahr
TagNr = 80 + SJ + A ' Tagnummer Ostervollmond
(5) Berechnung Datum Ostervollmond aus Tagnummer
Tk = 112 + A
Monat = Tk * 16 / 489
Tag = Tk – 489 * Monat / 16
Erläuterung: Die Tagnummer vom Ostervollmond wurde eingesetzt in die Formel 5. (1)
Beispiel für Ostervollmond 23.3.2016 (A = 2, siehe oben)
Tk = 112 + 2
Monat = 114 *16 / 489 = 3
Tag = 114 – 489 * 3 / 16 = 114 – 91 = 23
(6) Weitere Vollmonde nach Ostern (nicht genau)
TagNr (Z) = 80 + SJ + A + Z * 295 / 10 '
Mit Z = 1 , 2 , 3, … 1. Vollmond nach Ostern, usw.
Der Abstand beträgt jeweils 29,5 Tage.
Vollmonde nach Ostern als Datum
Tk = 112 + A + Z * 295 / 10
Monat = Tk * 16 / 489
Tag = Tk – 489 * Monat / 16
Beispiel für 1. Vollmond nach Ostersonntag 2016 (A = 2, siehe oben)
Tk = 112 + 2 + 1 *295 / 10 = 114 + 29 = 143
Monat = 143 *16 / 489 = 4
Tag = 143 – 489 * 4 / 16 = 143 – 122 = 21
1. Vollmond nach Ostersonntag 21.4.2016
Allerdings genau am 22.4.2016 7:23 Uhr MESZ, also in der Nacht vom 21./22.4.2016
(7) Vollmonde ab März je Monat
Datum der Vollmonde ab Anfang März (A siehe oben)
Tk = 112 + A – A / 9 * 21 + (Monat – 3) * 295 / 10
Tag = Tk – 489 * Monat / 16
Achtung! Bei Tag =1 und eventuell bei Tag =2 ( +29,5) liegt ein zweiter Vollmond am Ende des Monats.
A = Anzahl Tage ab 21. März. Mit –A/9*21 wird Vollmond Anfang März erfasst.
Beispiel für Vollmond Juli 2016 (A = 2, siehe oben)
Tk = 112 + 2 – 0 + (7 –3 ) *295 / 10 = 114 + 118 = 232
Tag = 232 – 489 * 7 / 16 = 232 – 113 = 19
1. Vollmond im Juli ist am 19.7.2016
Genau am 20.7.2016 0:56 Uhr Sommerzeit MESZ, also in der Nacht vom 19./20.7.2016
10) Datum mit Jahreszahl berechnen
Der Wochentag (Mittwoch, Sonntag, usw.) liegt fest und es wird das zugehörige Datum (Tag) gesucht.
10.1) Buß- und Bettag mit Jahreszahl berechnen
(1) Jahr 2-stellig für Jahr 2000 bis 2099
Tag = 22 – (year + year / 4) MOD 7 ' Datum Tag für Buß- und Bettag (year 2-stellig, 00 bis 99) im November
Oder mathematisch umgeformt: Tag = 22 – ( year * 5 / 4 ) MOD 7
(2) Jahr 4-stellig für Jahr 1901 bis 2099
Buss_Bet_Tag = 22 – (JAHR –1 + JAHR / 4) MOD 7 ' Datum Tag für Buß- und Bettag (Jahr 4-stellig, 1901 bis 2099)
Anmerkung: Das Datum eines Wochentags hängt allein vom Jahr ab.
Der Rest nach der Division (MOD 7) beträgt 0 bis 6. Dieser Wert wird vom spätest möglichen Tag 22 abgezogen, dadurch liegt der Buß- und Bettag auf dem 16. bis 22. November.
Diesen Rest nenne ich Jahreskennziffer Jx. Damit kann noch einfacher gerechnet werden.
10.2) Jahreskennziffer Jx
Buss_Bet_Tag = 22 – Jx ' Datum Tag für Buß- und Bettag im November
Jx ist der Wochentag vom 31.12. in jedem Jahr, auch im Schaltjahr (0 bis 6 = Sonntag bis Samstag).
Die Jahreskennziffer Jx kann auf verschiedene Weise errechnet werden.
Jx = (year + year / 4) MOD 7 ' year 2-stellig 00 bis 99 für 2000 bis 2099
Jx = year * 5 / 4 MOD 7 ' year 2-stellig (weitere Möglichkeit)
Jx = (Jahr –1 + Jahr / 4) MOD 7 ' Jahr 4-stellig für 1901 bis 2099
Jx = (Jahr * 5 – 4 ) / 4 MOD 7 ' Jahr 4-stellig (weitere Möglichkeit)
Jx = (Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400) MOD 7 ' Jahr 4-stellig ab 1583 (gregorianisch)
Jx = 6 – E MOD 7 ' mit Osterkennzahl E, alle Jahre ab 1583 (gregorianisch)
Anmerkung und Erläuterung:
In die Wochentagsformel WoTag = ( Jx + TagNr – 1 – SJ ) MOD 7 wird für 31.12. TagNr 365 bzw. 366 eingesetzt.
Dabei wird (365 –1 – 0) MOD 7 = 0 bzw. (366 –1 – SJ) MOD 7 = 0.
Wochentag 31.12. = Jx
Ebenso in der Formel WoTag = ( Tag + KT + Jx ) MOD 7 mit KT = (13 * Monat +8) / 5 (gültig März bis Dez.)
entfällt Tag und Monat (KT), weil für 31.12. gilt (31 + 32) MOD 7 = 0
Anzahl der Tage ab dem rechnerischen Jahr 0 bis zum aktuellen Jahr beträgt (365 * Jahr) plus die Schalttage 29. Februar.
= 365 * Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400
Zur Berechnung des Wochentages mit MOD 7 kann die Anzahl Tage je Jahr 365 entfallen, weil 365 MOD 7 = 1 ist.
Die Jahreskennziffer hängt auch mit der Osterkennziffer Ed (siehe oben) zusammen. Die Formel lautet Jx = 6 – Ed
Buss_Bet_Tag = 22 – Jx mit Jx = 6 – E MOD 7 ergibt Buss_Bet_Tag = 16 + E MOD 7
10.3) Muttertag, Sommerzeit, Advent, usw. mit Jahreskennziffer berechnen
(1) Muttertag
ist der zweite Sonntag im Mai mit dem spätest möglichen Tag 14. Mai. Soll Pfingsten berücksichtigt werden, wird mit der Osterkennzahl (siehe oben) gerechnet.
Tag = 14 – Jx ' Datum Tag für Muttertag im Mai
(2) Advent
Tag = 24 – Jx ' Datum Tag für 4. Advent im Dezember
Tag = 17 – Jx ' Datum Tag für 3. Advent im Dezember
Tag = 10 – Jx ' Datum Tag für 2. Advent im Dezember
Tag = 1 + (32 – Jx) MOD 30 ' Datum Tag für 1. Advent im Dezember / November
Monat = 12 – Tag / 27 ' Datum Monat jeweils Tag des Advents (Dezember / November)
(3) Totensonntag und Volkstrauertag
Tag = 26 – Jx ' Datum Tag für Totensonntag (Ewigkeitssonntag) im November
Tag = 19 – Jx ' Datum Tag für Volkstrauertag im November
(4) Sommerzeit Winterzeit (Merkerbit Sommerzeit für Steuerungen siehe Teil 2 Uhr)
Beginn der Sommerzeit ist letzter Sonntag im März mit dem spätest möglichen Tag 31.3. (Konstante = 5).
Tag = 31 – (Jx + 5) MOD 7 ' Datum Tag für Beginn Sommerzeit im März
Ende der Sommerzeit ist letzter Sonntag im Oktober mit dem spätest möglichen Tag 31.10. (Konstante = 2)
Tag = 31 – (Jx + 2) MOD 7 ' Datum Tag für Ende Sommerzeit im Oktober
(5) Sommerzeit direkt mit Jahr berechnet 2-stellig für 2000 bis 2099
Tag = 31 – ( 5 + year*5 / 4) MOD 7 ' Datum Tag für Beginn Sommerzeit (year 2-stellig)
Tag = 31 – ( 2 + year*5 / 4) MOD 7 ' Datum Tag für Ende Sommerzeit (year 2-stellig)
(6) Sommerzeit mit 4-stelligem Jahr (1901) 1996 bis 2099
Im Vergleich zur 2-stelligen Jahreszahl ist die Konstante um –1 verringert.
Tag = 31 – (Jahr + 4 + Jahr / 4) MOD 7 ' Datum Tag für Beginn Sommerzeit (Jahr 4-stellig)
Tag = 31 – (Jahr + 1 + Jahr / 4) MOD 7 ' Datum Tag für Ende Sommerzeit (Jahr 4-stellig)
Tag = 31 – ( 4 + Jahr*5 / 4) MOD 7 ' Datum Tag für Beginn Sommerzeit (Jahr 4-stellig)
Tag = 31 – ( 1 + Jahr*5 / 4) MOD 7 ' Datum Tag für Ende Sommerzeit (Jahr 4-stellig)
Anmerkung: Die jetzt gültige Sommerzeit von März bis Oktober jeweils letzter Sonntag wurde 1996 eingeführt.
2-stellig für 2000 bis 2099 oder 4-stellig für 1900 bis 2099 oder beliebiges Jahr mit Osterkennzahl E bzw. Jx
(1) Eidgenössischer Dank-, Buss- und Bettag
wird am dritten Sonntag im September gefeiert, mögliches Datum 15. bis 21.9.
Tag = 21 – (4 + year *5 / 4) MOD 7 ' Datum Tag für Sonntag spätestens am 21. 9. (year 2-stellig)
Tag = 21 – (4 + Jx) MOD 7
Dieser Tag kann ebenfalls mit der Osterkennzahl (siehe oben) berechnet werden.
Tag = 15 + (E + 3) MOD 7 ' mit Osterkennzahl E, Datum Tag für Sonntag frühestens am 15.9.
(2) Genfer Bettag
liegt auf dem Donnerstag nach dem ersten Sonntag im September.
Tag = 11 – (4 + year *5 / 4) MOD 7 ' Datum Tag für Donnerstag spätestens am 11. 9. (year 2-stellig)
Tag = 11 – (4 + Jx) MOD 7
Tag = 5 + (E + 3) MOD 7 ' mit Osterkennzahl E, Datum Tag für Donnerstag frühestens am 5.9.
(3) Berner Zwiebelmarkt
am vierten Montag im November bedeutet spätester Termin 28.11.
Tag = 28 – ( 1 + year *5 / 4 ) MOD 7 ' Berner Zibelemärit, (year 2-stellig)
Tag = 28 – (1 + Jx) MOD 7
Tag = 28 – ( Jahr *5 / 4 ) MOD 7 ' Berner Zibelemärit, (Jahr 4-stellig)
Tag = 22 + (E + 6) MOD 7 ' berechnet mit Osterkennzahl E, Datum Tag für Montag frühestens am 22.11.
Tag = 28 – 6 * E MOD 7 ' (umgeformt)
12) Allgemeine Berechnung des Datums von Feiertagen oder Sondertagen
Der Wochentag (Mittwoch, Sonntag, usw.) liegt fest und es wird das zugehörige Datum (Tag) gesucht.
Das Datum vom Erntedankfest oder anderer Feiertage kann mit einem dieser Verfahren (Jahreszahl oder Ostern) berechnet werden.
Beim Verfahren mit dem Osterdatum wird der frühest mögliche Tag und beim Verfahren mit der Jahreszahl wird der spätest mögliche Tag benutzt.
Umrechnung: (Frühest möglicher Tag) + 6 = (spätest möglicher Tag)
z.B. für 1. Sonntag im März ist der frühest mögliche Tag der 1. März, dann ist der 7. März der spätest mögliche Tag.
Oft sind zusätzlich Konstante notwendig, weil Monate nicht ein Vielfaches von Wochen sind.
Im Folgenden wird die Jahreszahl (year 2-stellig für 2000 bis 2099) genutzt.
Bei 4-stelliger Jahreszahl 1900 bis 2099 wird die Konstante K um –1 verringert. Zu einer negativen Konstanten wird +7 addiert.
(1) Für Feiertage im März bis Dezember gelten die folgenden einfachen Formeln (year 2-stellig für 2000 bis 2099).
Tag = (spätester Tag) – (year + K + year / 4) MOD 7
Die Konstante K beträgt 0 bis 6 je nach Feiertag und kann mit meiner Formel berechnet werden.
K = ((13*Monat +8) / 5 + (spätester Tag) – Wochentag) MOD 7
Beispiele:
Die endgültige Formel entsteht, indem der späteste Tag und die errechnete Konstante K eingesetzt werden.
Tag = 31 – (year + K + year / 4) MOD 7 ' Datum Tag z.B. spätester Tag am 31. des Monats
Tag = 7 – (year + K + year / 4) MOD 7 ' Datum Tag z.B. spätester Tag am 7. des Monats
Tag = 11 – ( 5*year / 4 + K ) MOD 7 ' (alternative Formel) z.B. spätester Tag am 11. des Monats
Beispiele für Berechnung der Konstanten K für März bis Dezember:
Berechnung des 1. Montags im Mai. (Montag = 1, spätester Tag = 7.5.)
K = ((13*5+8) / 5 + 7 – 1) MOD 7 = ((65+8) / 5 + 6) MOD 7 = (14+6) MOD 7 = 6
Beginn der Sommerzeit ist letzter Sonntag im März. (Sonntag = 0, spätester Tag = 31.3.)
K = ((13*3+8) / 5 + 31 – 0) MOD 7 = ((39+8) / 5 +31) MOD 7 = (9+31) MOD 7 = 5
Genfer Bettag liegt auf Donnerstag nach ersten Sonntag im September (Donnerstag = 4, spätester Tag 11.9., weil Sonntag 7.9.)
K = ((13*9+8) / 5 +11 – 4) MOD 7 = ((117+8) / 5 + 7) MOD 7 = (25+7) MOD 7 = 4
Auch mit der Osterkennzahl E kann das Datum eines Wochentages sehr einfach bestimmt werden. Dabei ist das Jahr ab März beliebig, weil es schon in der Osterkennzahl berücksichtigt wurde.
Tag = (frühester Tag) + (E + Ke ) MOD 7 ' Datum Tag z.B. frühester Tag am 5. des Monats
Die endgültige Formel entsteht, indem der früheste Tag und die errechnete Konstante Ke eingesetzt werden.
Die Konstante Ke beträgt 0 bis 6 je nach Feiertag und kann mit meiner Formel berechnet werden.
Ke = (57 – (13*Monat +8) / 5 – (frühester Tag) + Wochentag) MOD 7
Beispiel für Berechnung der Konstanten Ke für März bis Dezember:
Genfer Bettag liegt auf Donnerstag nach ersten Sonntag im September (Donnerstag = 4, frühester Tag 5.9., weil Sonntag 1.9.)
Ke = (57 – (13*9+8) / 5 – 5 + 4) MOD 7 = (57 – 25 – 5 + 4) MOD 7= 3
Kontrolle der obigen Berechnung für Genfer Bettag mit spätestem Tag ergab K = 4 und kann umgerechnet werden zur Konstanten Ke
Ke = 7 – K = 7 – 4 = 3
(2) Für Feiertage im Januar und Februar gelten die folgenden Formeln (year 2-stellig für 2000 bis 2099).
Tag = 27 – (year + ( year + K ) / 4) MOD 7 ' Datum Tag z.B. spätester Tag 27. des Monats
Tag = 27 – (5 * year + K ) / 4 MOD 7 ' alternativ
Monatsanfang 1.1.2000 war ein Samstag also = 6 und 1.2.2000 war ein Dienstag also = 2
Januar Ma = 6, Februar Ma = 2 (gültig für 2000 bis 2099)
K = (Ma + (spätester Tag) – Wochentag) MOD 7 *4 –1
Beispiele für Berechnung der Konstanten für Januar und Februar:
Sonntag spätester Tag 27. Januar (Sonntag =0, spätester Tag 27.)
K = (6 + 27 – 0 ) MOD 7 *4 –1 = 19
Freitag spätester Tag 27. Februar (Freitag = 5, spätester Tag 27.)
K = (2 + 27 – 5 ) MOD 7 *4 –1 = 11
13) Ostersonntag (Tag und Monat) berechnen für Steuerungsgeräte in Basic z.B. c-control
Fortsetzung Datum berechnen für Steuerungen
------------------------------------------------ ENDE Teil 2 Datum berechnen allgemein ------------ nach_oben
--------------------- zurück zu Datum berechnen Startseite
Für Rückfragen und Hinweise: Datum@M.Wilzeck.de