Eigentlich klingt die Fragestellung erstmal leicht: Wie kann ich mit einem PHP-Script errechnen, wieviele Wochen ein Jahr hat? Man würde denken, die Aufgabe läßt sich lösen, indem man die Anzahl der Tage in einem Jahr durch sieben teilt, aber das ist leider nicht das korrekte Ergebnis. Der Grund dafür liegt in der ISO-8601 Spezifikation, die besagt, dass der 28. Dezember immer in der letzten Woche des Jahres liegt.
There are several mutually equivalent and compatible descriptions of week 01:
the week with the year’s first Thursday in it (the formal ISO definition),
the week with 4 January in it,
the first week with the majority (four or more) of its days in the starting year, and
the week starting with the Monday in the period 29 December – 4 January.
As a consequence, if 1 January is on a Monday, Tuesday, Wednesday or Thursday, it is in week 01. If 1 January is on a Friday, Saturday or Sunday, it is in week 52 or 53 of the previous year (there is no week 00). 28 December is always in the last week of its year.
The week number can be described by counting the Thursdays: week 12 contains the 12th Thursday of the year.
Das entsprechende PHP-Script, das diese Spezifikation berücksichtigt und darauf basierend prüft, ob ein Jahr 52 oder 53 Wochen hat, habe ich auf Stackoverflow gefunden:
function getIsoWeeksInYear($year) {
$date = new DateTime;
$date->setISODate($year, 53);
return ($date->format("W") === "53" ? 53 : 52);
}
// Beispiel: Anzahl der Wochen für Jahr 2008 ermitteln
$year = 2008;
echo "Anzahl der Wochen im Jahr ".$year.": ".getIsoWeeksInYear($year)." Wochen";
Ich muss gestehen, dass ich es nicht komplett verstanden habe. Wer die Funkionsweise genauer unter die Lupe nehmen möchte, kann mit ein paar „echo“-Befehlen sicher heraus bekommen, was im Einzelnen passiert. Die verwendeten Befehle habe ich euch hier verlinkt, falls ihr weiter einsteigen möchtet:
die dreifachen Gleichzeichen === heißen in PHP übrigens, dass nicht nur der Vergleich der Werte der Variablen gleich sein muss, sondern auch der Typ der Variablen (Integer, String etc.) muss gleich sein.
Folgt man der ISO-Spezifikation 8601, dann ergibt sich für die Jahre 2010 und 2020 eine Anzahl von 53 Wochen, während zum Beispiel 2008, 2009 und die meisten anderen Jahre nur 52 Kalenderwochen haben. Eine längere Liste könnt ihr ja mal mit dem Skript oben erstellen. ;-)
Jens betreibt das Blog seit 2012. Er tritt für seine Leser als Sir Apfelot auf und hilft ihnen bei Problemen technischer Natur. Er fährt in seiner Freizeit elektrische Einräder, fotografiert (natürlich am liebsten mit dem iPhone), klettert in den hessischen Bergen rum oder wandert mit der Familie. Seine Artikel beschäftigen sich mit Apple Produkten, Neuigkeiten aus der Welt der Drohnen oder mit Lösungen für aktuelle Bugs.
Hat dir der Artikel gefallen und helfen dir die Anleitungen im Blog? Dann würde ich mich freuen, wenn du das Blog über eine Steady-Mitgliedschaft oder bei Patreon unterstützen würdest.