PHP: Kalenderwoche ermitteln
Tutorial von Stefan Trost | Letztes Update am 08.07.2024 | 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.
Über den Autor
Software 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
MySQL: Zeilenumbrüche in MySQL
Tipp | 0 Kommentare
PHP: Falsches Jahr für erste Kalenderwoche
Frage | 1 Antwort
PHP: Nur bestimmte Buchstaben, Zahlen und Zeichen in einem String zulassen
Tipp | 10 Kommentare
PHP: Aktuelles Datum und Zeit ermitteln
Tutorial | 0 Kommentare
HTML Formular: Weiterleitung abhängig von Radiobutton oder Checkbox
Tutorial | 0 Kommentare
PHP: Formular-Eingaben als Array an PHP Skript schicken
Tipp | 0 Kommentare
PHP: Upload großer Dateien
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.
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
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
Anstatt "int" für eine einstellig, kann man auch nur ein kleines "w" nehmen ;)
18.10.2024 um 09:27