Die Wochennummer für ein bestimmtes Datum berechnen

(Auszug aus "XSLT Kochbuch" von Sal Mangano)

Problem

Sie wollen aus einem Datum die Nummer der Woche innerhalb des Jahres berechnen.

Lösung

XSLT 1.0

Die Wochennummer reicht von 1 bis 53. Die meisten Jahre haben zwar nur 52 Wochen, Jahre mit 53 Donnerstagen haben jedoch 53 Wochen.

Die Lösung greift auf das Template mit dem julianischen Tag zurück:

<xsl:template name="ckbk:calculate-week-number">
  <xsl:param name="year"/>
  <xsl:param name="month"/>
  <xsl:param name="day"/>
  <xsl:variable name="ckbk:j-day">
    <xsl:call-template name="ckbk:calculate-julian-day">
      <xsl:with-param name="year" select="$year"/>
      <xsl:with-param name="month" select="$month"/>
      <xsl:with-param name="day" select="$day"/>
    </xsl:call-template>
  </xsl:variable>
  <xsl:variable name="d4" select="($j-day + 31741 - ($j-day mod 7)) mod 146097 mod 36524 mod 1461"/>
  <xsl:variable name="L" select="floor($d4 div 1460)"/>
  <xsl:variable name="d1" select="(($d4 - $L) mod 365) + $L"/>
  <xsl:value-of select="floor($d1 div 7) + 1"/>
</xsl:template>

Achtung!
Diese Funktion geht von der Annahme aus, dass Montag der erste Tag der Woche ist. Die meisten anderen Funktionen in diesem Kapitel nutzen die beliebtere Konvention, bei der die Wochen am Sonntag beginnen (siehe die ISO-Kalenderrezepte für eine Erklärung dieser Eigenart).

XSLT 2.0

Benutzen Sie format-date( ):

<xsl:function name="ckbk:calculate-week-number" as="xs:integer">
  <xsl:param name="date" as="xs:date"/>
  <xsl:sequence select="xs:integer(format-date($date,'[W]'))"/>
</xsl:function>

Diskussion

Die Wochennummer ist die Zahl, die jeder Woche eines Jahres zugeordnet ist. Woche 1 eines Jahres ist die Woche, die den 4. Januar oder, äquivalent dazu, die Woche, die den ersten Donnerstag im Januar enthält. Eine Woche, die sowohl das Ende eines Jahres als auch den Anfang des nächsten Jahres enthält, wird dem Jahr zugeordnet, in dem die meisten Tage dieser Woche liegen. Dies geschieht, wenn das Jahr an einem Donnerstag oder bei einem Schaltjahr an einem Mittwoch beginnt. In den USA wird dieses Nummerierungssystem momentan nicht verwendet.

Siehe auch

Siehe das Rezept Mit dem islamischen Kalender arbeiten.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2006 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT Kochbuch" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O'Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de