Den Wochentag berechnen

(Auszug aus "XSLT Kochbuch" von Sal Mangano)

Problem

Sie wollen bei gegebenem Jahr, Monat und Tag den Wochentag ermitteln.

Lösung

XSLT 1.0

Die folgende Berechnung schafft das und liefert einen Integer-Wert im Bereich 0–6 zurück, wobei 0=Sonntag ist.

<xsl:template name="ckbk:calculate-day-of-the-week">
  <xsl:param name="date-time"/>
  <xsl:param name="date" select="substring-before($date-time,'T')"/>
  <xsl:param name="year" select="substring-before($date,'-')"/>
  <xsl:param name="month" select="substring-before(substring-after($date,'-'),'-')"/>
  <xsl:param name="day" select="substring-after(substring-after($date,'-'),'-')"/>
  <xsl:variable name="a" select="floor((14 - $month) div 12)"/>
  <xsl:variable name="y" select="$year - $a"/>
  <xsl:variable name="m" select="$month + 12 * $a - 2"/>
  <xsl:value-of select="($day + $y + floor($y div 4) - floor($y div 100) + floor($y div 400) + floor((31 * $m) div 12)) mod 7"/>
</xsl:template>

XSLT 2.0

Benutzen Sie format-date, um den Wochentag als Zahl oder als sprachabhängigen String zu erhalten.

Diskussion

Sie werden feststellen, dass diese Gleichungen und diejenigen in den anderen Beispielen vernünftigen Gebrauch von der XPath-Funktion floor() machen. Dies ist die einzige Möglichkeit, um Integer-Arithmetik in XSLT 1.0 zu emulieren, da alle Zahlen intern als Gleitkommawerte repräsentiert werden. Der Grund, weshalb diese Berechnung funktioniert, hat mit den Feinheiten des gregorianischen Kalenders zu tun, die für XSLT nicht besonders relevant sind. Beispielsweise erklärt die Tatsache, dass in 400 Jahren 97 Schaltjahre auftreten, sodass jedes Jahr, das durch 4 teilbar ist, ein Schaltjahr ist, es sei denn, es ist durch 100, aber nicht durch 400 teilbar, die abschließende Berechnung. Weitere Informationen finden Sie im Abschnitt Die Logik hinter den Berechnungen im nächsten Rezept.

  

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