Table of Contents |
Recipe 4.5. Calculating the Week Number for aSpecified DateProblemYou want to convert from a date to the number of the week within the year. SolutionXSLT 1.0The 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>
XSLT 2.0Use 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> DiscussionThe 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 AlsoSee Recipe 4.8, later in this chapter. |
Table of Contents |