Die hier zugrunde liegende Definition der Kalenderwoche ist international festgelegt und wird in den meisten Ländern Europas auch verwendet. Daneben werden aber, insbesondere außerhalb Europas, auch andere Wochennummerierungen gebraucht. Mehr dazu ist in Abschnitt B.3 meiner Kalender-FAQ zu finden.
Falls Sie einfach nur zu einem Datum die Kalenderwoche wissen wollen, dann nutzen Sie einfach das unten stehende Formular zur Berechnung mit Javascript oder die umfangreichen Möglichkeiten meiner Seite mit verschiedenen Kalenderberechnungen.
Kalenderwochen beginnen mit dem Montag. Jede Woche gehört immer als ganze zu einem Kalenderjahr (es gibt keine halben Kalenderwochen), wodurch dann aber bestimmte Tag am Jahresanfang oder -ende zu einem anderen Jahr gehören können als ihre Kalenderwoche. Da Kalenderjahre ein oder zwei Tage mehr haben als die 364 Tage, die genau 52 Wochen entsprächen, haben die meisten Jahre 52, manche aber 53 Kalenderwochen.
Die Kalenderwochen eines Jahres werden beginnend mit der Woche gezählt, in der der 4. Januar des jeweiligen Jahres liegt. Das ist, wie man leicht zeigen kann, zugleich die Woche, in der der erste Donnerstag des Jahres liegt.
Hier wird ein Algorithmus zur Errechnung der Kalenderwoche aus einem Datum in Form von Pseudo-Code sowie eines kleinen JavaScripts vorgestellt (ohne Gewähr!).
(Früher stand hier ein weniger eleganter Algorithmus, den Sie bei Bedarf hier finden können.)
wochendonnerstag = donnerstag(datum(j,m,t)); kalenderwochenjahr = jahr(wochendonnerstag); ersterdonnerstag = donnerstag(datum(kalenderwochenjahr,januar,4)); kalenderwoche = (eptage(wochendonnerstag)-eptage(ersterdonnerstag))/7+1; print "Kalenderwoche: ",kalenderwoche," des Jahres ",kalenderwochenjahr; function donnerstag(Datum) { # gibt als Datumsobjekt den Donnerstag der Woche # zurück, in der das übergebene "Datum" liegt. # 'eptage(Datum) - wochentag(Datum)' ist der Montag, # drei Tage später der Donnerstag return datum(eptage(Datum) - wochentag(Datum) + 3); } function wochentag(Datum) { # gibt den zugehörigen Wochentag als Zahl zurück # wobei 0=Montag, 1=Dienstag, ... 6=Sonntag # Hinweis: Diese Zuordnung entspricht nicht der in # vielen Systemen üblichen Definition, ist hier aber # sinnvoll, da Kalenderwochen mit dem Montag beginnen. [Code ausgelassen] } function datum(.....) { # gibt das zugehörige Datumsobjekt zurück [Code ausgelassen] } function jahr(Datum) { # gibt die zu einem Datumsobjekt gehörende # Jahreszahl zurück [Code ausgelassen] } function eptage(Datum) { # gibt die Zahl der Tage zurück, die vom Beginn # der (systemspezifischen) Zeitrechnung bis zum "Datum" # vergangen sind [Code ausgelassen] }
Und so sieht der JavaScript-Code der Berechnung der Kalenderwoche aus:
Datum=new Date(j,m-1,t); // Anm. 1 DoDat=donnerstag(Datum); kwjahr=DoDat.getFullYear(); DoKW1=donnerstag(new Date(kwjahr,0,4)); // Anm. 2 kw=Math.floor(1.5+(DoDat.getTime()-DoKW1.getTime())/86400000/7) // Anm. 3, 4 function donnerstag(datum) { // Anm. 5 var Do=new Date(); Do.setTime(datum.getTime() + (3-((datum.getDay()+6) % 7)) * 86400000); // Anm. 3 return Do; }
Aufgerufen wird diese Berechnung z.B. so:
kw1=kalenderwoche(2005,1,2); // 2. Januar 2005
new Date
erzeugt Javascript ein Datums-Objekt. Wie bei manchen
anderen Programmiersprachen steht 0 hier für Januar, so dass die Monatszahl
gegenüber der üblichen Zählweise um 1 verringert wird.kw
abgelegt.
Exakterweise müsste man zum errechneten Wochenabstand der beiden Donnerstage
nur 1 addieren; aber um Rundungsfehler zu vermeiden (Javascript unterscheidet nicht
zwischen Fließkomma- und ganzen Zahlen) wird hier um weitere 0.5 erhöht
und dann abgerundet.kwjahr
.%
) ergibt sich der Wochentag
in der benötigten Form (0 = Montag bis 6 = Sonntag; siehe oben im Pseudo-Code).Excel 97 bringt keine Kalenderwochenberechnung mit; spätere Versionen haben zum Teil Berechnungen, die nicht der internationalen Norm entsprechen. Daher ist es wünschenswert, eine geeignete Berechnung zu haben.
Man könnte sie in Visual Basic programmieren. Der oben vorgestellte Algorithmus lässt sich aber auch in eine Formel für eine Tabellenzelle von Excel fassen: Nehmen wir an, dass in Zelle B3 eine Datumsangabe steht. Dann können Sie die Kalenderwoche in einer anderen Zelle so errechnen:
[Kalenderwoche, z.B. in Zelle B4:]
(B3-WOCHENTAG(B3;3)+3-DATUM(JAHR(B3-WOCHENTAG(B3;3)+3);1;4)+WOCHENTAG(DATUM(JAHR(B3-WOCHENTAG(B3;3)+3);1;4);3)-3)/7+1
Wenn Sie auch das Jahr zu dieser Kalenderwoche brauchen, dann geht das mit kürzeren Formeln so:
[Kalenderwoche in B4:] (B3-WOCHENTAG(B3;3)+3-DATUM(B5;1;4)+WOCHENTAG(DATUM(B5;1;4);3)-3)/7+1 [Jahr in B5:] JAHR(B3-WOCHENTAG(B3;3)+3)
Selbstverständlich sind statt B3 bis B5 bei Bedarf passende andere Tabellenzellen zu wählen.
Die Kalenderwochenberechnung mit Erklärung steht hier auch in Form einer (mit ZIP komprimierten) Excel97-Datei zum Download zur Verfügung.
© 2000-2009 H.v.Hatzfeld