Calculating the Week Number for a Specified Date

Problem

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

Solution

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="date:calculate-week-number">
    <xsl:param name="year"/>
    <xsl:param name="month"/>
    <xsl:param name="day"/>
   
    <xsl:variable name="date:j-day">
      <xsl:call-template name="date: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>

Warning

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.

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

Get XSLT Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.