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 = (yz) * 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).

nach_oben

4)      Tage im Monat

(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)

nach_oben

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

nach_oben

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.

nach_oben

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

nach_oben

(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.

nach_oben

(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

nach_oben

(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.

nach_oben

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.

nach_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)

nach_oben

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.

nach_oben

(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* +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.

nach_oben

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

nach_oben

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 + SJ1 – SJ + Jahr +  Jahr / 4 – Jahr / 100 + Jahr / 400)  MOD 7  ' dabei entfällt  (31 –3 + SJ1 – 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 –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 –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 /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

nach_oben

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.

          Berechnung Buß- und Bettag

(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.

nach_oben

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.

nach_oben

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)

nach_oben

9.21)    Vollmond berechnen

(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

                         nach_oben

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 = 14Jx  ' 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.

11)   Schweizer Feiertage

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)

nach_oben

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