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

Black Friday: Vorsicht vor schädlichen QR-Codes

Bösartige QR-Codes, die per E-Mail versendet werden, eignen sich sehr gut, um Spam-Filter zu umgehen.

1 Tag ago

Black Friday: Zahl der ominösen Shopping-Websites steigt

Unsichere Websites und Phishing-Mails in Verbindung mit Black Friday können kauffreudigen Konsumenten zum Verhängnis werden.

2 Tagen ago

SmokeBuster bekämpft SmokeLoader

Malware SmokeLoader wird weiterhin von Bedrohungsakteuren genutzt, um Payloads über neue C2-Infrastrukturen zu verbreiten.

2 Tagen ago

Taugen Kryptowährungen als Unterstützer der Energiewende?

Bankhaus Metzler und Telekom-Tochter MMS testen, inwieweit Bitcoin-Miner das deutsche Stromnetz stabilisieren könnten.

2 Tagen ago

Supercomputer-Ranking: El Capitan überholt Frontier und Aurora

Mit 1,7 Exaflops ist El Capitan nun der dritte Exascale-Supercomputer weltweit. Deutschland stellt erneut den…

3 Tagen ago

Ionos führt neue AMD-Prozessoren ein

Der deutsche Hyperscaler erweitert sein Server-Portfolio um vier Angebote mit den neuen AMD EPYC 4004…

3 Tagen ago