2323 Stimmen

PHP: Kalenderwoche ermitteln

Tutorial von Stefan Trost | Letztes Update am 03.06.2023 | Erstellt am 03.03.2016

Heute möchte ich euch zeigen, wie ihr mit PHP die Kalenderwoche (Nummer der Woche) zu einem beliebigen Datum ermitteln könnt.

Dies ist einfacher als man vielleicht vermuten könnte: Wir benötigen dafür lediglich die PHP-Funktion date() und das Format-Zeichen "W". Übergeben wir der Funktion date() dieses Zeichen als ersten Parameter und ein beliebiges Datum als zweiten Parameter, bekommen wir die Kalenderwoche beziehungsweise die Wochennummer des angegebenen Datums als Ergebnis zurück.

Hier ist ein Beispiel für einen solchen Aufruf:

$datum = time();         // aktuelles Datum

echo date("W", $datum);  // Ausgabe zum Beispiel: 03 oder 10

Die Woche beginnt für PHP gemäß ISO-8601 beim Montag und die Ausgabe erfolgt immer zweistellig als String (also zum Beispiel "01" statt "1").

Wollen wir für die Kalenderwochen 1 bis 9 eine einstellige Zahl erhalten, können wir einfach (int)date("W", $datum) schreiben. Damit wird das Resultat der Funktion von einer Zeichenkette in eine Integer-Zahl umgewandelt, deren Ausgabe naturgemäß einstellig und ohne führende Nullen erfolgt. Auf die gleiche Weise können wir natürlich auch vorgehen, falls wir die Kalenderwoche nicht als String sondern als Zahl benötigen (zum Beispiel um damit zu rechnen).

Jahr der Kalenderwoche

Eine Problematik ergibt sich fast zu jedem Jahreswechsel und zwar immer dann, wenn die erste Kalenderwoche des neuen Jahres bereits im Dezember anfängt oder die letzte Kalenderwoche eines Jahres bis in den Januar hinein reicht. In beiden dieser Fälle führt die Verwendung von date("W Y", $datum) zu falschen Ergebnissen:

$datum = strtotime('2027-01-01');

echo date("W Y", $datum);  // Ausgabe: 53 2027

Dieses Beispiel zeigt was schief läuft: Für den 1.1.2027 erhalten wir die 53te Kalenderwoche 2027. Das "Y" liefert uns immer die Jahreszahl vom übergebenen Datum - das ist hier 2027 - wir benötigen aber 2026 als Ergebnis, da der 1. Januar aus Sicht der Kalenderwochenzählung in diesem Fall noch zum alten Jahr gehört (dieser Fall kann neben dem ersten Januar auch für einen 2ten oder 3ten Januar auftreten).

Zum Glück haben die Entwickler von PHP an diesen Sonderfall gedacht und uns den Parameter "o" (klein geschriebenes O) geschenkt. Wenn wir diesen Parameter statt dem üblichen Parameter "Y" für die Jahreszahl mit der date()-Funktion verwenden, bekommen wir das zu dem übergebenen Datum passende Kalenderwochen-Jahr ausgegeben. Hier ist ein Beispiel:

$datum = strtotime('2027-01-01');

echo date("W o", $datum);  // Ausgabe: 53 2026

Und schon stimmt das Ergebnis: Wir erhalten die 53te Kalenderwoche 2026, die in diesem Jahr erst im Kalenderjahr 2027 endet.

Dieser Code funktioniert darüber hinaus natürlich auch für den umgekehrten Fall, also für den Fall dass die erste Kalenderwoche des neuen Jahres bereits am 29ten, 30ten oder 31ten Dezember beginnt.

AntwortenPositivNegativDatumStimmen
44 Stimmen

Frage:

Könnte man nach der Ermittlung

<"$datum = strtotime('2016-01-01');

echo date("W o", $datum); // Ausgabe: 53 2015">

das Jahr wieder wegnehmen, so dass man immer die Richtige Kalenderwoche erhält?
18.04.2023 um 13:51

AntwortenPositiv Negativ
66 Stimmen

Du meinst statt "W o" nur "W" zu schreiben?

Klar, das geht. Die Parameter sind alle unabhängig voneinander und beziehen sich nur auf das übergebene Datum, in deinem Beispiel in Form der Variable $datum.
18.04.2023 um 15:34

Positiv Negativ
Antworten
Antworten

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

PHP: Upload großer Dateien

Tutorial | 0 Kommentare

PHP: Datei Download Skript

Tutorial | 0 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.