Recipe4.5.Calculating the Week Number for aSpecified Date


Recipe 4.5. Calculating the Week Number for aSpecified Date

Problem

You want to convert from a date to the number of the week within the year.

Solution

XSLT 1.0

The week number ranges from 1 to 53. Although most years have 52 weeks, years containing 53 Thursdays have 53.

The solution reuses the Julian day template:

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

This function assumes that Monday is the first day of the week. Most of the other functions in this chapter use the more popular convention in which weeks start on Sunday. See the ISO calendar recipes for an explanation of this idiosyncrasy.


XSLT 2.0

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

Discussion

The week number is the number assigned to each week of the year. Week 1 of any year is the week that contains January 4 or, equivalently, the week that contains the first Thursday in January. A week that overlaps the end of one year and the beginning of the next is assigned to the year when most of the week's days lie. This will occur when the year starts on Thursday or Wednesday in a leap year. The U.S. does not currently use this numbering system.

See Also

See Recipe 4.8, later in this chapter.




XSLT Cookbook
XSLT Cookbook: Solutions and Examples for XML and XSLT Developers, 2nd Edition
ISBN: 0596009747
EAN: 2147483647
Year: 2003
Pages: 208
Authors: Sal Mangano

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net