PHP-Script: Wieviele Wochen hat ein Jahr?

Icon frag Sir Apfelot

Icon frag Sir ApfelotEigentlich 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:

  • DateTime
  • setISODate
  • Funktion date()
  • 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.

Welche Jahre haben 52 oder 53 Kalenderwochen?

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. 😉

Sir Apfelot auf SteadyHQ unterstützen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.