home
Der Recherchekompass
  [ home | anleitungen | recherchen | hilfe | sitemap | index | suchen ] 
home » recherchen » calendarium » algorithmen » wochentag 6.3 Die Kalenderwoche »

  Unser Kalender:
6.3 Wochentagsberechnung

  Die Berechnung des Wochentages ist prinzipiell recht einfach, wenn erst der Wochentag eines bestimmten Tages bekannt ist, können alle anderen Tage abgezählt werden. Dies ist auch das Schema hier: Zunächst wird der Wochentag für den ersten Januar bestimmt, und dann wird der gewünschte Tag "abgezählt"

 

6.3.1 Der 1. Januars eines Jahres

Die Funktion CurrentDoomDay berechnet den Wochentag des ersten Tages des Jahres. Dazu muss man wissen, dass die Wochentage des 1. Januar der Jahrhunderte im gregorianischen Kalender immer wieder gleich beginnen. Ist das Jahrhundert (die ersten beiden Stellen des Jahres) glatt durch vier teilbar, fängt es mit einem Samstag an. Ergibt sich bei der Teilung ein Rest von 1 ist es Freitag, ... (Die Zahl in CenturyDoomDay bezieht sich auf die Position in WochenTage.)


 var WochenTage = new Array
                  ("Mo","Di","Mi","Do","Fr","Sa","So");
 ...
 function CurrentDoomDay(jahr) {
   var CenturyDoomDay = new Array (5,4,2,0);
   var CC             = Math.floor(jahr/100);
   var YY             = jahr%100;
   var CCDoomDay      = CenturyDoomDay[CC%4];
   var YYDoomDay      = 0;

   if (YY == 0)
      YYDoomDay = CCDoomDay;
   else if (YY%12 == 0)
           YYDoomDay = (CCDoomDay + YY/12 - 1) % 7;
   else YYDoomDay = ( CCDoomDay
                     + (Math.floor(YY/12)
                     + (YY%12)
                     + Math.floor(((YY-1)%12)/4))
                    ) % 7;
   if ((CC%4 == 0) && (YY != 0))
      YYDoomDay = (YYDoomDay + 1) % 7;

   return YYDoomDay;
 } 

Interessanterweise erhöhen sich die Wochentage eines Datums nach zwölf Jahren um eines, also ist der 12. März 1958 ein Mittwoch und der 12. März 1970 ein Donnerstag. Es ergibt sich also für den 1. Januar eines beliebigen Jahres: Wie oft hat sich seit Beginn des Jahrhunderts der Wochentag um eins verschoben (ganzahliges Teilen durch 12) und um wieviel Resttage verschiebt es sich weiter? Bei den Resttagen ist es wichtig, zu wissen wieviel Schaltjahre darin sind, also durch 4. Diese drei Zahlen aufaddiert und durch sieben geteilt, ergibt der Rest die Verschiebung des Wochentages seit Beginn des Jahrhunderts. (vgl. Doomsday Algorithm) Dies abgebildet auf die WochenTage wird zurückgegeben.

Leider hatte sich in meinem ursprünglichen Algorithmus ein Fehler eingeschlichen, der aber von Sven Schottke erkannt und auch behoben werden konnte. Hier jetzt also die korrigierte Version.

 

 

6.3.2 Ein beliebiger Tag im Jahr


 var WochenTage = new Array
                  ("Mo","Di","Mi","Do","Fr","Sa","So");
 ...
 function Wochentag(tag,monat,jahr) {
   var WchTag1Jan = CurrentDoomDay(jahr);
   var Tage       = Tag_des_Jahres(tag,monat,jahr) - 1;
   var Wochentag  = (WchTag1Jan+(Tage%7))%7;

   return WochenTage[Wochentag];
 } 

Wenn der Wochentag des ersten Januars eine Jahres erst bekannt ist (CurrentDoomDay), dann ist die Ermittlung des Wochentages eines beliebigen Tages des Jahres einfach. Dazu wird zunächst die Tageszahl für das Datum berechnet. Wenn man die Vielfachen von 7 daraus wegläßt, ergibt sich die Verschiebung zum 1. Januar. Dieses brauch dann nur noch auf unser bereits bekanntes WochenTage-Feld abgebildet werden.

Eine andere Art den Wochentag zu bestimmen, ergibt sich über die julianische Tageszahl (s.u.) Da diese als Tag Null Montag, den 1. Januar 4713 n.Chr. angibt, ergibt der Rest der ganzzahligen Division des julianischen Tages mit sieben den jeweiligen Wochentag.

Anmerkung: Der bisher hierfür gemeldete Fehler, resultiert aus einem Fehler in der Berechnung des Wochentages des 1. Januars des aktuellen Jahres. Der Fehler steckte also nicht in dieser Prozedur, sondern in CurrentDoomDay. Zu dem Fehler ist es gekommen, weil die Übernahme des Doomsday-Algorithmus eine Korrektur verlangt, wenn nicht der letzte des Februars sondern der erste Januar als Doomsday benutzt wird. Hierdurch verschiebt sich nämlich die zwölfer Periode innerhalb des Jahrhunderts.

 

 

6.3 Die Kalenderwoche »

[Seitenanfang] geändert: 11.10.2001 by hgm © 1999, Hans-G. Mekelburg, all rights reserved.
[ impressum | haftungsausschluss ]