PHP Kalenderwoche: Kein Bug, nur miese Dokumentation

Stefan - 30. Januar 2009

Die PHP date()-Funktion ist ein wunderbares Tool, um mit Datumsangaben zu rechnen. Für ein Projekt brauchte ich nun eine Funktionalität, die mir zu einem Datum Jahr und Kalenderwoche in der Form „YYYY-WW“ ausgibt. Eigentlich alles ganz einfach mit date() – „Y“ steht für die vierstellige Jahreszahl, „W“ für die zweistellige Kalenderwoche entsprechend der ISO-Definition. Und entsprechend funktioniert das auch:
>>> date("Y-W", strtotime("2006-12-31"))
'2006-52'

Doch was passiert, wenn das Jahresende bereits zur Kalenderwoche des neuen Jahres gehört, wie etwa beim Jahreswechsel 2008 auf 2009:
>>> date("Y-W", strtotime("2008-12-31"))
'2008-01'

Stimmt nicht ganz, denn der 31.12.2008 liegt nicht in der ersten Kalenderwoche des Jahres 2008, sondern in der 1. KW 2009. Leider zeigte mir die PHP-Dokumentation keinen Hinweis auf das Problem – was daran lag, dass ich die deutsche Dokumentation hatte. In der englischen Beschreibung findet sich das Format „o“ („kleines Oh“), das die Jahreszahl nach der selben ISO-Norm wie die Kalenderwoche angibt.
>>> date("o-W", strtotime("2008-12-31"))
'2009-01'

Und siehe da, die Ausgabe ist nun wie erwartet. Das Format „o“ wurde übrigens erst mit PHP 5.1.0 eingeführt.

Abgelegt in: PHP

4 Kommentare:

Ich habe bei einem Script die ausgabe damit erweitert klappt wunderbar.

Vielen, vielen Dank für diese Info!
Hatte mich schon gewundert, dass dieses „Problem“ anscheinend außer Acht gelassen wurde.

Gratuliere erst mal dazu dass so ein Fehler überhaupt gefunden wurde. Jedenfalls werd ich mir das merken dass die Date Funktion eben ihre Eigenheiten hat und so ein kleines „o“ davor setzen.

Danke! Wie soll man sonst darauf kommen. Hat mein kleines Jahreswechsel-Problem gleich gelöst!

Schreibe einen Kommentar
benötigt
benötigt (wird nicht angezeigt)
optional

Suchen