Announcement

Collapse
No announcement yet.

Wochennummer berechnen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wochennummer berechnen

    Hallo,

    kann ohne die java hilfe die Wochennummer berechnet werden?

    <date>20080301</date>
    <date>20071212</date>
    <date>20080102</date>
    <date>20080312</date>

    danke und lg

  • #2
    Hi,

    werfe mal Google an. Dort findest du Formeln zur Berechnung der Wochennummer. Hier ist ein Bespiel http://www.salesianer.de/util/kalwoch.html. Mußt die nur nach XSL umschreiben!

    Gruß Jevo

    Comment


    • #3
      Wenn XSLT 2.0 verfügbar ist, dann hilft die neue XSLT-Funktion format-date() in Verbindung mit dem Spezifikator "W":

      format-date(date,'[W]')

      Der gegebene String muss allerdings entsprechend als gültiges Datum vorbereitet werden:

      <xsl:value-of select="format-date(xs:date(fn:concat(fn:substring(date,1,4),'-',fn:substring(date,5,2),'-',fn:substring(date,7,2))),'[W]')"/>

      Ergebnis für <date>20080301</date>: 9

      Comment


      • #4
        Hier wäre ein funktionierendes Stylesheet für 1.0:
        Code:
        <?xml version="1.0" encoding="UTF-8"?>
        <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        version="1.0">
        
        <xsl:template match="/">
        <xsl:call-template name="calculate-week-number">
        <xsl:with-param name="date" select="'20080301'"/>
        </xsl:call-template>
        </xsl:template>
        
        
        <xsl:template name="calculate-julian-day">
        <xsl:param name="year"/>
        <xsl:param name="month"/>
        <xsl:param name="day"/>
        
        <xsl:variable name="a" select="floor((14 - $month) div 12)"/>
        <xsl:variable name="y" select="$year + 4800 - $a"/>
        <xsl:variable name="m" select="$month + 12 * $a - 3"/>
        
        <xsl:value-of select="$day + floor((153 * $m + 2) div 5) + $y * 365
        
        +
        floor($y div 4) - floor($y div 100) + floor($y div 400) -
        32045"/>
        </xsl:template>
        
        
        
        <xsl:template name="calculate-week-number">
        <xsl:param name="date"/>
        <xsl:variable name="year" select="substring($date, 1, 4)"/>
        <xsl:variable name="month" select="substring($date, 5, 2)"/>
        <xsl:variable name="day" select="substring($date, 7, 2)"/>
        
        <xsl:variable name="j-day">
        <xsl:call-template name="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>
        </xsl:stylesheet>

        Comment


        • #5
          Wobei die Ausgangsquelle (die ich ja in unserer privaten Kommunikation nannte) auch hier erwähnenswert ist: XSLT-Kochbuch von O'REILLY (S. 132/133).

          Comment

          Working...
          X