2. Tipps und Tricks    (zurück zur  Startseite )    zurück zu  Datum berechnen

Erweiterung Datum berechnen und Informationen  (2.3.2008, Stand:  27.12.2011)

Zusammenfassung: Formeln zu Datum und Feiertagen mit Osterkennzahl

Download      Formeln zu Feiertagen.doc        Formeln zu Feiertagen.pdf 

 Schaltjahr  und Anzahl der Schaltjahre berechnen

 Tag-Nummer im Jahr berechnen, Schaltjahr, Datumsdifferenz, Monatslänge

 Datum_aus_Tagnummer des Jahres bilden,                 NEU

 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 im Julianischen und Gregorianischen Kalender

Einfache_Berechnung_des_Wochentages

 Umrechnen vom Julianischen zum Gregorianischen Datum

 Osterdatum_berechnen      einfache Osterformeln, Osterkennzahl E  und Osterkennziffer,  überarbeitet jetzt für alle Jahrhunderte

Frühester und spätester Ostertermin errechnen

Bewegliche_Feiertage  berechnen    Rosenmontag, Karfreitag, Himmelfahrt, Pfingsten, Fronleichnam

Auch_mit_Osterdatum_berechnen   Buß- und Bettag , Muttertag , Datum Sommerzeit , Datum Advent,

Wochentag_mit_Osterkennzahl  von Weihnachten und Silvester berechnen

Test meiner Osterformeln mit Gauss / Dr. Lichtenberg, J.M. Oudin, Anonym (Butcher), O'Beirne, Hutchin, Clavius

Piper (1841), Zeller (Fehler z.B. 2011 korrigiert)   siehe Osterformeln_Test .doc

Feiertage mit Jahreszahl berechnen

Berechnung Muttertag, Advent, Datum Sommerzeit Winterzeit, Buß- und Bettag

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

Die folgenden 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 Mehrfaches 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 z.B.  –a MOD 30 = (60 – a) MOD 30

Mit Gauß Formel   – E MOD 7 = 6 * E MOD 7 kann umgeformt werden  = (7 – E) MOD 7 = 7 –1 – (E –1 +7) MOD 7 = 6 – (E + 6) MOD 7

Mit     y = 6 – ( E + x ) MOD 7  =   (6 * E + x ) MOD 7  =   (6 * E + 6  – x ) MOD 7  kann man auch umformen zum Beispiel bei Osterkennzahl E

WoTag = 6 – ( E + 6 ) MOD 7          WoTag = 6 * E  MOD 7         ' alternative Formeln für Wochentag   1. Weihnachtstag 25.12.

Allgemein gilt :   –z * x MOD y = (y z) * x MOD y  , zur Vermeidung negativer Ergebnisse z.B. (a – z) MOD 30 = (a + 29*z) 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 umgewandelt.

(1)   Tagnummer mit Formel berechnen  (alle Jahrhunderte) aus Tag, Monat und Jahr

TagNr = Tag + 31 *(Monat –1)                                  '  Tagnummer im Jahr für Januar und Februar

TagNr = Tag + (153 * Monat –162) / 5  + SJ             '  Tagnummer im Jahr für März bis Dezember

Zwischen den beiden Formeln kann man umschalten mit

 if  Monat < 3 then  TagNr = Tag + 31 *(Monat –1)  else  TagNr = Tag + (153 * Monat –162) / 5  + SJ

(2)   Eine Formel für alle Monate zur Berechnung der Tagnummer

TagNr = Tag + 489 * Monat / 16 – (7 + Monat) / 10 *(2 – SJ) – 30

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

Ansonsten entspricht  die Formel der Geraden y = ax + b mit y = b = 30 bei x = 0 und Steilheit der Geraden  a = 489 / 16 .

TagNr = Tag + 489 * Monat SHR 4 – (13 + Monat) SHR 4 *(2 – SJ) – 30

Die gleiche Formel  alternativ mit Befehl Schiebe rechts 4 Bit statt  / 16.

 

(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)  und mit Boolescher Algebra oder mit  (if ... then .. ) erfolgen.

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

(6)   Weitere Formel für Berechnung der Tagnummer

TagNr = Tag + 30 *(Monat –1) + 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.

(7)   Tagnummer bestimmen mit Programmzeilen oder mit Formel errechnen für Programme z.B. Basic   (1901 bis 2099)        siehe   Datum berechnen für Steuerungen

(8)    Tagnummer von Ostern und den beweglichen Feiertagen berechnen

Tag mit Osterkennzahl  E = 1 ist der 1. Dezember des Vorjahres auch bei Schaltjahren.

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 24.4. 2011.  Der 23.4.2011 ist Ostersamstag mit der Osterkennzahl E = 147. (Berechnung der Osterkennzahl siehe unten)

Jahres-TagNr (Ostersonntag) = E  – 33 = 147 – 33 = 114

TagNr (bewegliche Feiertage) = E – 33 + SJ + D

Beispiel: 2011 Pfingstmontag liegt 50 Tage nach Ostern          Tagnummer = 147 –33 + 0 + 50 = 164

                       Rosenmontag liegt 48 Tage vor Ostern Tagnummer = 147 –33 + 0 – 48 =   66

 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. ergeben die Formel.

(9)   Abstand von Datum zu Datum  (Datumsdifferenz)

 Wie viele Tage liegen zwischen Weihnachten und Ostern im nächsten Jahr?

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?

Beispiel Ostersonntag 2012 (E = 131) und 24.12.2012

Lösung: TagNr vom 24.12.  = Tag + (153 * Monat –162) / 5  + SJ = 358 + SJ , (Kontrolle 365 +SJ – 31+24)

minus TagNr von Ostersonntag =  E – 33 + SJ  ergibt = 358 +SJ – (E –33 +SJ) ergibt die Formel:

Anzahl = 391 – E  = 391 –131  = 260

 Wie viele Tage liegen zwischen  Ostern und Buß- und Bettag?

Beispiel  Ostersonntag 2012 (E = 131),  Erläuterung:  Differenz obiger Formeln der Tagnummer ergibt die Formel.

Anzahl = 353 – E + E MOD 7  = 353 –131 + 5 = 227

  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

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 =  (153 * Monat –162) / 5  + SJ  (gültig für Monate März bis Dezember)

 z.B. für  März  (153 * 3 –162 ) / 5 +SJ = 59 + SJ  = Anzahl der Tage vor dem 1. März (Kontrolle 31 +28 +SJ).

(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 Formel  Monatsende TagNr = 30 *Monat  + (Monat +1) *9 / 16 – (10 +Monat) / 12 *(2 – SJ)

 

5)      Datum aus Tag-Nummer des Jahres berechnen (alle Jahrhunderte)

Aufwändiger ist es, Jahr (4-stellig) und Tagnummer des Jahres in ein Datum bestehend aus Tag und  Monat umzuformen.

Für Januar bzw. Februar und Schaltjahr sind die folgenden Korrekturen notwendig.

SJ = 1 / (1+Jahr MOD 4)   1 / (1+Jahr MOD 100)   + 1 / (1+Jahr MOD 400)  '  Schaltjahrkennung, im Schaltjahr = 1, sonst = 0

(1)   Mit Tag-Korrektur

Tk =  TagNr + 30 + (TagNr + 400 + SJ) / 460 *(2 – SJ)  '   Tag Korrekturwert nach Januar und Februar und Schaltjahr

Monat =  Tk  * 16 / 489

Tag = TagNr + 30 – 489 * Monat / 16 + (7 + Monat) / 10 *(2 – SJ)

 

(2)   Mit Januar und Februar als Monat 13 und 14

Tk =  TagNr – SJ +  ( 459 + SJ – TagNr ) / 400 * (365 + SJ) ' Tag Korrekturwert, Schaltjahr, Januar und Februar im Folgejahr (+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

(3)   Mit Januar und Februar Tag- und Monats-Korrektur

Mk = SJ + (431 – TagNr ) / 400 * TagNr / 10                       ' Monatskorrekturwert für Schaltjahr und Januar

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

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.

Am Anfang und Ende des Jahres werden die richtigen Wochennummern bestimmt.

Zum Beispiel liegt der 31.12.2008  in Woche 1 des Jahres 2009.

2009 hat 53 Wochen und die ersten Tage 2010 liegen in Woche 53.

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        ' Rechen-Jahr  4-stellig

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

goto ende  ' Fertig, Wochennummer liegt in Variable KW

#WoPruef   '  Woche 53 prüfen mit Woche vom 1.1. des Folgejahres

D = 1

RJ = Jahr  + 1

gosub WochenNr ' (Wochennummer wird geprüft)

if KW = 1 then goto ende ' à Fertig, Woche 1 des Folgejahres

KW = 53 '  Woche 53 ist richtig

RJ = Jahr  –1 ' RJ wird rückgesetzt 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. (im Unterprogramm wird das Vorjahr gebildet)

gosub WochenNr   ' (Korrektur der Wochennummer und des Jahres)

goto ende  ' à  Fertig, Wochennummer 52 bzw. 53 liegt in Variable KW

 ' Unterprogramm, Grundformel zur Bestimmung der Wochennummer

#WochenNr '

RJ = RJ  –1  ' 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  'WoNr

Return ' à Ausgang: Wochennummer KW und Jahr

#ende

print “ Woche: “;KW;“ zu Jahr “;RJ +1;    ' 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.

Achtung: Innerhalb des Programms beziehen sich Vorjahr und Folgejahr  auf das Rechenjahr = (Jahr –1).

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

JT = Tag + 489 * Monat / 16 – (7 + Monat) / 10 *(2 – SJ) – 30 ' Tag-Nr des Jahres

(1)     Jahr  4-stellig für 1976 bis 2103 mit Osterkennzahl E (Osterberechnung E siehe unten)

G = (JT + 9 – ( E + 5 + SJ) MOD 7) / 7 ' Grundwert Wochennummer

AJ = (53 – G) / 53       ' =1 bei WoNr  G = 0  bei Anfang des Jahres

EJ = G / 53                   '=1 bei WoNr  G =53 bei Ende des Jahres

AE = ((Jahr – (Jahr – 1972) / 28*28) MOD 11 +3 +EJ) MOD 6 / 5   '=1 bei 53 Wochen im aktuellen Jahr oder Vorjahr

für Korrektur am Anfang des Jahres Woche 53 statt 52 oder am Ende des Jahres Woche 53 statt 1.

WoNr = G  + AJ * (AE + 52)  – EJ * (1 – AE) * 52   ' Wochennummer

Zugehöriges Jahr = Jahr – AJ + EJ * (1 – AE)

Erläuterung:

Die Gültigkeit der Wochennummer 53 wird mit dem Schaltjahrzyklus 28 Jahre (= 7 Wochentage x 4) geprüft.

Bei Woche 0 am Anfang des Jahres wird mit  AJ * (AE + 52)  Woche 52 bzw. 53 gebildet.

Bei Woche 53 am Ende des Jahres wird mit  –EJ * (1 – AE) * 52  Woche 1 hergestellt, wenn AE = 0.

Die Wochennummer für Ostersonntag wird mit dem Jahrestag bestimmt (siehe oben, Jahrestag mit Osterkennzahl) und mit einem Verfahren Wochennummer.

 

(2)   Jahr  4-stellig für 1901 bis 2099

JT = Tag-Nr des Jahres (siehe 1)

G = ((5 * Jahr +3) / 4  MOD 7 + JT +3) / 7    ' Grundwert Wochennummer

A = 1 / (G +1)                                                                        ' =1 für Berechnung mit Vorjahr bei  G =0

KA = A * 362                                                                       ' Korrektur Jahresanfang bei G = 0; Woche 53 oder 52

KE =  G / 53 * ((5 * Jahr +8) / 4  MOD 7 + 4) / 7 *52          ' Korrektur Jahresende bei G = 53; für Woche 1 statt 53

WoNr = ((5 * (Jahr – A) +3) / 4  MOD 7 + JT +3 + KA) / 7 – KE   ' Wochen-Nummer

 

(3)     Jahr (year) 2-stellig 01 bis 99 für 2001 bis 2099

JT = Tag-Nr des Jahres (siehe 1)

G = ((5 * year +7) / 4  MOD 7 + JT +3) / 7   ' Grundwert Wochennummer

A = 1 / (G +1)                                                                        ' =1 für Berechnung mit Vorjahr bei  G =0

KA = A * 362                                                                       ' Korrektur Jahresanfang bei G = 0; Woche 53 oder 52

KE =  G / 53 * ((5 * year +12) / 4  MOD 7 + 4) / 7 *52        ' Korrektur Jahresende bei G = 53; für Woche 1 statt 53

WoNr = ((5 * (year – A) +7) / 4  MOD 7 + JT +3 + KA) / 7 – KE   ' Wochen-Nummer

 

(4)   Wochennummer für alle Jahrhunderte (Alternative 1)

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

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.

 

(5)   Wochennummer für alle Jahrhunderte (Alternative 2)

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

 

(6)   Wochennummer für alle Jahrhunderte (Alternative 3)

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

 

(7)   Wochennummer für alle Jahrhunderte (Alternative 4)

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.

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

Allgemein für alle Wochentage  (WoTag 0 bis 6 = So, Mo, Di, Mi, Do, Fr, Sa)

Tagwert = WoNr *7  – 3 + (WoTag +6) MOD 7 – (( 5 * Jahr +3) / 4) MOD 7 ' Jahr 4-stellig für 2000 bis 2099

TagNr = 1 + (Tagwert + 364 +SJ) MOD (365 +SJ)

Aus der TagNr kann das Datum (Tag und Monat) gebildet werden. Formeln siehe oben.

Ableitung für die Formeln:

 Die Formel für Montag wird erweitert mit (+ Wochentag –1).

 Tagwert = WoNr *7 + WoTag – 4 – (( 5 * Jahr +3) / 4) MOD 7

 Weil Sonntag am Wochenende liegt, muss Sonntag (0) zu (7) gewandelt werden. Für WoTag wird  (WoTag + 6) MOD 7 +1 eingesetzt.

Bei Woche 1 bedeutet Tagwert = 0 oder ein negatives Ergebnis, dass der Tag im vorhergehenden Jahr liegt.

Beispiel: TagNr =  2 +31 = 29. 12. Vorjahr.

Bei Woche 52 bzw. 53 bedeutet Tagwert größer 365 bzw. 366, dass der Tag in Woche 1 des Folgejahres liegt.

Die richtige Tag-Nr. wird aus dem Tagwert gebildet. Bei Tagwert 366 ohne Schaltjahr entsteht Tag-Nr. 1 des Folgejahres, also 1.Januar.

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.  

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)

WoTag = ( Jahr / 4 – Jahr / 100 + Jahr / 400 + Jahr + TagNr – 1 – SJ )  MOD 7     ' Tag 0 bis 6 (So, Mo, Di, Mi, Do, Fr, Sa)

TagKW = ( Jahr / 4 – Jahr / 100 + Jahr / 400 + Jahr + TagNr – 2 – SJ )  MOD 7 + 1         ' Tag 1 bis 7 ( Mo, Di, Mi, Do, Fr, Sa, So)

Erläuterung zu (1) (2): Der Wochentag ist im Schaltjahr in der Tagnummer  ab 29. Februar bereits erhöht enthalten.

Im Schaltjahr wird die weitere Erhöhung durch  Jahr / 4 usw. mit – SJ  verhindert und damit erst im folgenden Jahr wirksam.

(3)   Tag (0 bis 6) der Woche (Jahr 2000 bis 2099)

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)

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)

nach_oben

8.2)            Wochentag mit dem Datum (Tag, Monat, Jahr) berechnen

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

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

(2)   Monatswert KT  bestimmen, 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

Alternativ KT = M * 31 / 12   + M / 11 * (6 – SJ)

Erläuterung zu dieser Berechnung von KT:

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.

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

(3)   Wochentag berechnen mit Osterkennzahl E , allgemein für alle Jahrhunderte ab 1583 als Tag 0 bis 6 für So, Mo, Di, Mi, Do, Fr, Sa)

WoTag = 6 – ( E – Tag  – KT ) MOD 7   ' Wochentag für beliebiges Datum (gregorianisch) mit der Osterkennzahl E statt Jahr.

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)

(4)   Wochentag berechnen, allgemein für alle Jahrhunderte  wie vor, jedoch mit Jahr (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.

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

(6)   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. Hierfür wird eine Unterscheidung gebraucht.

JF = 3 / (Monat +1)    ' Schalter Jan Feb = 1, sonst  = 0

 RJ = Jahr – JF            ' Rechenjahr ist Vorjahr bei Jan Feb, sonst Jahr

Üblich wird für die Monatsanfänge eine Tabelle benutzt. Einfacher sind meine Formeln:

 m = Monat + JF * 12 ' Für Januar, Februar wird  Monat 13, 14 gebildet

MK = (13 * m + 8) / 5 ' Monats-Konstante errechnen, (MK MOD 7 wäre der Tabellenwert je Monat)

Tabellenwert je Monat MK in Klammern:

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)

Oder einfacher 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.

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

(7)   Wochentag vom Monatsende

Die folgenden Formeln entstanden, indem Tag = 0 und der Folgemonat (Monat +1) in obige Formeln eingesetzt wurden.

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)

(8)    Beispiele Wochentag berechnen  mit Formeln (5)

Bei der Umstellung vom Julianischen auf  Gregorianischen Kalender folgte auf  Donnerstag, 4.10.1582 der Freitag, 15.10.1582.

Die Wochentagsfolge blieb damals erhalten. Fälschlicherweise wird oft behauptet, dass Tage mit Datum 5.10. bis 14.10.1582 nicht existieren. Tatsächlich gehören diese Tage zum Julianischen Kalender.

Galileo  wurde am 18.2.1564 (Julianisch) geboren und starb am 8.1.1642 (gregorianisch). Nach Julianischem Kalender starb er im Jahre 1641, weil damals die Differenz zwischen den Kalendern 10 Tage betrug.

Beispiel 1: Galileo musste am 22.6.1633 (Datum nach 1582, also Gregorianischer Kalender) der Tatsache abschwören, dass sich die Erde um die Sonne dreht.

MK = (13* 6  +8) / 5 = 86 / 5 = 17 (Ganzzahl)

WoTag = (22 + 17 + 1633 + 1633/4 –1633/100 + 1633/400 ) MOD 7

           = (22+17+1633+ 408 – 16 + 4) MOD 7 = 2062 MOD 7 = 3 ' Es war  Mittwoch 22.6.1633.

An diesem Tag rettete er sich mit der Notlüge vor Folter und Tod. „Und sie dreht sich doch“ wird er gedacht haben. 360 Jahre später 1992 wurde er rehabilitiert und hat endgültig gesiegt.

Beispiel 2:  Reformator Dr. Martin Luther, Anschlag der 95 Thesen an die Tür der Schlosskirche in Wittenberg am 31.10.1517 (Datum vor 1582, also Julianischer Kalender).

MK = (13*10+8)/5 = 138 /5 = 27 (Ganzzahl)

WoTag = ( 31 + 27 +1517 +1517 / 4  – 2 ) MOD 7  = 1952 MOD 7 = 6  ' Es war  Samstag 31.10.1517

Wie andere Festtage z.B. 24.12. sind Allerheiligen und Reformationstag an das Datum gekoppelt unabhängig vom Julianischen oder Gregorianischen Kalender.

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

Tagesdifferenz =  Jahr / 100 – Jahr / 400 – 2    muss zum Julianischen Datum addiert werden, um das Gregorianische Datum zu erhalten.

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

Tagesdifferenz =  RJ / 100 – RJ / 400 – 2  

Einfache Formeln erhält man durch mathematisches Umformen.

 Auch hier muss Anfang des Jahrhunderts beachtet werden (z.B. 1899 für Datum bis 28.2.1900).

Für die Jahrhundertzahl gilt  HZ = Jahr / 100    (z.B. für 1983 ist HZ =19):

Tagesdifferenz =  (3 * HZ +3) / 4 – 2

Für das Jahrhundert gilt   JH = 1 + Jahr / 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.

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

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

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 wird direkt Ostertag und Monat berechnet.

Mit der Osterkennzahl 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.

Die Osterkennzahl E ist der Jahrestag von Ostersamstag 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.

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  (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 / 31 = 0  und für 1. April (Z = 32) ergibt  Z / 31 = 1.  Man braucht also nur 3 addieren und erhält 3 bzw. 4 für März / April.

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 

Nun 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

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

9.5)      Beispiel Jahr 2011

A = ( 204 –  JAHR MOD 19  *11 ) MOD 30

2011 MOD 19 = 16 ' Rest von Division 2011 / 19

A = ( 204 –  16 *11 ) MOD 30 = (204 – 165) MOD 30 = 28 ' Rest von Division 28 / 30

B = 120 + A – A / 27

B = 120 + 28  – 28 /27 = 147

C = ( B + JAHR * 5 / 4 ) MOD 7

2011 *5 / 4 = 2513

C = ( 147 + 2513) MOD 7  = 0

E =  B –  C  = 147 – 0 = 147   ' E  Osterkennzahl für 2011

Tag = 1+ E MOD 31  ' Ostersonntag (Datum Tag)

Tag = 1+ 147 MOD 31 = 1+ 23 = 24

Monat = E / 31            ' Ostermonat    (Monat)

Monat = 147 / 31 = 4              Ostersonntag ist am 24.4.2011

nach_oben

9.6)      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.7)      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.8)      Berechnung  Ostersonntag für alle Jahrhunderte ab 1583 bis....

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 +1 zu B für den Abstand zu Samstag davor.

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 der nächsten Formel):

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 Sonntag auf  dem 22. bis 28. März. Der 27. März wäre der zugehörige späteste 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 Ostersamstag davor liegt. Dies hat den Vorteil, dass der berechnete Wochentag zu B (0 bis 6 = So bis Sa) direkt abgezogen werden kann, um Sonntag/Samstag zu erreichen.

Hierzu wird bei der Berechnung von C nicht nur der Wochentag dieses Jahrestages bestimmt, sondern zusätzlich  wird ein 1 Tag berücksichtigt, um Ostersamstag zu erhalten.

Hier folgt nun die Ableitung der Formel. In die allgemeine Wochentagsformel mit Jahrestag-Nummer wird der Jahrestag von B eingesetzt.

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

WoTag = (B –31 –3 + SJ – 1 – SJ + Jahr +  Jahr / 4 – Jahr / 100 + Jahr / 400)  MOD 7    ' dabei ist  (–31 –3 + SJ – 1 – SJ ) MOD 7 = 0

WoTag = (B + 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  ' Anzahl Tage für den Abstand zu Samstag davor.

Mit   k = Jahr / 100 – Jahr / 400 –1  ist die Tagesdifferenz um  – –1 = +1 erhöht und Wochentag C beginnt mit Samstag =0, Sonntag =1, usw.  

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

Alternativ kann k  erhöht werden anstelle M = 15.  A = (M + ..) MOD 30 bleibt unverändert mit  195 MOD 30 = 15.

In der Wochentagsformel (mit Jahrestagnummer) ergibt  C = k MOD 7 = 195 MOD 7 =  6, wegen  -k  ergibt 7 – 6 = +1 die notwendige Erhöhung um 1.

         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  +1 zu B für den Abstand zu Samstag davor.

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)

9.9)      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                                            '  28. März = spätester 1. Sonntag ab 22. März.

C = ( B +  Jahr  + Jahr / 4  – k ) MOD 7        ' Wochentag zu  B  für den Abstand zu Sonntag davor.

Wert =  B – C                                                ' Ostersonntag als Märzdatum 

Monat = 3 + wert / 32                                    ' Ostermonat     (Monat)

Tag = wert MOD 32 + wert / 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 ab Vollmond nach Frühlingsanfang (21. März) also frühestens 22. März. Innerhalb einer Woche ist der späteste Sonntag der 28. März.

Dieser Wert wird  um A (= Anzahl Tage vom 21. März bis zum nächsten Vollmond) erhöht (= B). Der späteste Tag bewirkt, dass der Ostersonntag davor liegt.

Der späteste Tag 28. März wirkt sich in der Berechnung des Wochentags C nicht aus, wegen 28 MOD 7 = 0.

Die Sonntage liegen im Abstand von 7 Tagen. Durch  7 MOD 7 = 0 hat dies bei der Berechnung des Wochentags keine Auswirkung.

Vorteilhaft ist, dass der berechnete Wochentag zu B (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 (4)

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  ' Anzahl Tage für den Abstand zu Sonntag davor.

Mit   k = Jahr / 100 – Jahr / 400 –2  ist die Tagesdifferenz um  – –2 = +2 erhöht und ersetzt KT = 2.  

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

 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.10)  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 zu  B  für den Abstand zu Sonntag davor.

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)

Erläuterung zu meiner 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 (4).

Alternativ kann  k  erhöht werden anstelle M = 15.  A = (M + ..) MOD 30 bleibt unverändert mit  (15 + 30 +30) MOD 30 = 15.

In der Wochentagsformel (mit Datum) ergibt C = (... –k) MOD 7 = -75 MOD 7 = -5 MOD 7 = 2 MOD 7 die notwendige 2 für Monat März.

         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 zu  B  für den Abstand zu Sonntag davor.

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)

9.11)  Kürzere Formeln , kleinere Zeiträume

Oben bei 8.4 steht der 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 +1 zu B für den Abstand zu Samstag davor.

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)   Eine Variante meiner 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 Ostermond 

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 97 erhöht werden, damit würde E = B – C .

9.12)  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 (+39), Pfingsten (+49) und Fronleichnam (+60) sind ebenfalls bewegliche Feiertage, weil sie an das Osterdatum gekoppelt sind.

D = 39  ' Beispiel Himmelfahrt (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 2011

F = 147 + 39 = 186

G = 186 + 186 / 154 = 186 +1 = 187

Tag = 1 + 187 MOD 31 = 1 + 1 = 2

Monat = 187 / 31 = 6  Himmelfahrt ist am 2.6.2011

9.13)  Berechnung der beweglichen Feiertage einschließlich Karnevalstage  (gilt für alle Jahre)

Weiberfastnacht (-52), Rosenmontag (48), Aschermittwoch (46), Karfreitag (2), Ostermontag (+1), Himmelfahrt (+39), Pfingsten (+49) und Fronleichnam (+60)

D = – 48 ' Beispiel Rosenmontag ( Distanz 48 Tage vor Ostern) 

F = E + D                                                          'Ostern (Easter) + Abstand (Distanz) des Feiertages

G = F + F / 154     92 / F * (3  – SJ)                 'mit  Ergänzung  für Karnevalstage im Februar

Tag = 1+ G MOD 31                  ' Datum Tag des gesuchten beweglichen Feiertags

Monat = G / 31                           ' Datum Monat (G Kennzahl des gesuchten Tages und Monats)

SJ = 1 / (1+Jahr MOD 4)   –1 / (1+Jahr MOD 100)  +1 / (1+Jahr MOD 400) '  Schaltjahrkennung, im Schaltjahr = 1, sonst = 0

Die Jahrhundertregel  –1 / (1+Jahr MOD 100)   +1 / (1+Jahr MOD 400)  kann bei Beschränkung auf 2001 bis 2099 weggelassen werden.

Anmerkung:  92 / F  hat den Wert= 0 ab März, jedoch Februar den Wert= 1 (dies entspricht (F < 93)= wahr)

Damit werden für Februar  3 bzw. in Schaltjahren  2 Tage abgezogen.

Die Osterkennzahl beginnt am 1. Dezember mit 31 Tagen für jeden Monat. Der 1.3. hat damit den Wert 3*31=93.

'***********************************************************************************

       Ergänzung am 11.10.2008       Das Jahr 2100 ist noch weit entfernt.   Oder doch nicht?

  Maximilian Alexander, Du sollst mit 91 Jahren nicht um 1 Tag zu spät den Rosenmontagszug verpassen.

  Dir widme ich die Korrektur für Februar im Jahr 2100, das kein Schaltjahr ist.

'***********************************************************************************

9.14)     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.15)    Datum zum Wochentag berechnen mit Osterkennzahl

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 für die Berechnung von Ostern ohnehin bereits festliegt, dann ist sinnvoll auch andere Feiertage mit meinen folgenden Formeln zu bestimmen.

Dabei ist das Jahr beliebig, weil es schon in der Osterkennzahl 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,..... und E= 137 für 2199, 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  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

          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 ' Korrekturmöglichkeit auf  1. Sonntag im Mai

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.

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.16)     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 immmer 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.

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.

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

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

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

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

Der folgend errechnete Wert  Jx  kann auf verschiedene Weise gebildet werden.

(1)     Jx = (year + year / 4) MOD 7             ' year 2-stellig 00 bis 99 für 2000 bis 2099

(2)     Jx =  year * 5 / 4  MOD 7                   ' year 2-stellig (weitere Möglichkeit)

(3)     Jx = (Jahr –1 + Jahr / 4) MOD 7         ' Jahr 4-stellig 1901 bis 2099

(4)     Jx = (Jahr * 5 – 4 ) / 4 MOD 7           ' Jahr 4-stellig (weitere Möglichkeit)

(5)     Jx = (Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400) MOD 7          ' Jahr 4-stellig  ab 1583 (gregorianisch)

(6)     Jx = 6 – E MOD 7  ' mit Osterkennzahl E, alle Jahre ab 1583 (gregorianisch)

Anmerkung: Die Jahreskennziffer hängt auch mit der Osterkennziffer Ed (siehe oben) zusammen. Die Formel lautet  Jx = 6 Ed

Buss_Bet_Tag = 22    Jx  und   Jx = 6 – E MOD 7  ergibt  Buss_Bet_Tag = 16 + E MOD 7

10.3)        Muttertag, Sommerzeit und Advent 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

Tag = 12 – Tag / 27  ' Datum Monat  jeweils Tag des Advents (Dezember / November)

(3)   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 (year 2-stellig) 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 (year 2-stellig) im Oktober

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

(5)   Sommerzeit mit 4-stelligem Jahr 2000 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)

 

11)   Schweizer Feiertage

2-stellig für 2000 bis 2099 oder 4-stellig für 1900 bis 2099 oder beliebiges Jahr mit Osterkennzahl E

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

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

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

 

Free counter and web stats