Tage einer Kalenderwoche für einen Web-basierten Kalender berechnen

Wie berechnet man zu einer gegebenen Kalenderwoche das entsprechende Montagsdatum? Selbst eine Suche per IRC, Google, Usenet und Mailingliste brachte keine befriedigenden Ergebnisse. Hinweise, dass es in einer der PEAR Pakete etwas zum Thema Berechnung gäbe, konnten aber nicht abschließend verifiziert werden, da man für die Lösung der Problemstellung kein weiteres bloated OO Paket installieren wollte.

Doch nun kurz zur Theorie: die 1. Kalenderwoche eines Jahres ist in ISO8601 als die Kalenderwoche definiert, die den ersten Donnerstag des Jahres enthält.

Von einem gegebenen Timestamp die Kalenderwoche zu errechnen ist nicht schwer:

date(‚W‘,$timestamp);

Aus der Theorie folgt der Schluss: um von einer gegebenen Kalenderwoche auf das entsprechende Datum des Montags in dieser KW zu kommen, muss man zunächst das Datum des Montags in der 1. Kalenderwoche bestimmen und dann einfach nach vorne rechnen. Warum? Weil die 1. Kalenderwoche eines Jahres bereits im Jahr davor beginnen kann. Beispiel: der 29. Dezember 2003 war der Montag der 1. KW des Jahres 2004.

Wie rechnet man nun auf den Montag der 1. KW eines Jahres? Dazu benötigt man die Werkzeuge mktime, date und ein paar Additionen, Subtraktionen und Multiplikationen. Doch zunächst der Reihe nach:

Berechnung des Wochentags des 1.1. des gewünschten Jahres. Sei $tag=1 und $monat=1 und $jahr=2004, so schriebe man $wtag = date(‚w‘,mktime (0,0,0,$monat,$tag,$jahr)); , um an die numerische Repräsentation des Wochentags des 1.1.2004 zu kommen. Heraus kommt, dass $wtag in diesem Fall eine 4 darstellt, also einen Donnerstag.

Laut Regel: die 1. Kalenderwoche eines Jahres ist die Woche, die den ersten Donnerstag des Jahres enthält, ist also $wtag

Die Funktion liefert, zur einfacheren Verwertung, einen Unix Timestamp zurück. Nun ist das 1. Etappenziel erreicht: zu einem gegebenen Jahr kann der Timestamp des Montags der 1. KW in diesem Jahr bekommen werden. Zeit für Hilfsfunktion 2: diese soll zu einer bestimmten KW eines Jahres den Timestamp des Montags in dieser KW zurückliefern. Die Idee ist einfach:

gib mir den Montag der 1. KW des gegebenen Jahres und addiere ($kw-1)*7 Tage darauf ($kw ist die gegebene Kalenderwoche des Jahres).

Einen großen Nutzen bei Datumsberechnungen aller Art liefert Ihnen mktime (). Sie können zum 1.1.2004 einfach 178 Tage drauf rechnen, und sie landen im richtigen Monat im richtigen Jahr. Auf Basis des Timestamps, den Ihnen mondaykw() zurückliefert, können Sie nun Ihren Kalender für die aktuell (z.B. per $_GET übergebene) ausgewählte Kalenderwoche aufbauen.



Björn Schotte ist Web Application Developer und Consultant. Neben seiner Erfahrung in vielen Webprojekten/Schulungen, u.a. für Lycos Europe, Cap Gemini Ernst & Young, Karlsruher Versicherungen, 100world.com AG, 21st Media, betreibt er auch noch einige nicht-kommerzielle Projekte wie zum Beispiel das PHP-Center www.php-center.de/.


Copyright
Alle Rechte an diesem Artikel sind Björn Schotte vorbehalten. Nachdruck und Vervielfältigung der redaktionellen Texte einschließlich Speicherung und Nutzung auf optischen und elektronischen Datenträgern nur mit Zustimmung von Björn Schotte und ZDNet.

ZDNet.de Redaktion

Recent Posts

Alphabet übertrifft die Erwartungen im ersten Quartal

Der Umsatz steigt um 15 Prozent, der Nettogewinn um 57 Prozent. Im nachbörslichen Handel kassiert…

2 Tagen ago

Microsoft steigert Umsatz und Gewinn im dritten Fiskalquartal

Aus 61,9 Milliarden Dollar generiert das Unternehmen einen Nettoprofit von 21,9 Milliarden Dollar. Das größte…

2 Tagen ago

Digitalisierung! Aber wie?

Mehr Digitalisierung wird von den Unternehmen gefordert. Für KMU ist die Umsetzung jedoch nicht trivial,…

2 Tagen ago

Meta meldet Gewinnsprung im ersten Quartal

Der Nettoprofi wächst um 117 Prozent. Auch beim Umsatz erzielt die Facebook-Mutter ein deutliches Plus.…

3 Tagen ago

Maximieren Sie Kundenzufriedenheit mit strategischem, kundenorientiertem Marketing

Vom Standpunkt eines Verbrauchers aus betrachtet, stellt sich die Frage: Wie relevant und persönlich sind…

3 Tagen ago

Chatbot-Dienst checkt Nachrichteninhalte aus WhatsApp-Quellen

Scamio analysiert und bewertet die Gefahren und gibt Anwendern Ratschläge für den Umgang mit einer…

3 Tagen ago