Calculate Week Number based on date
Defining Template 1- [This template calls another template below]
<xsl:template name="calculate-week-number">
<xsl:param name="year"/>
<xsl:param name="month"/>
<xsl:param name="day"/>
<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:param name="year"/>
<xsl:param name="month"/>
<xsl:param name="day"/>
<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>
Defining Template 2 - [Used by above 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>
Calling Template - [The returned value is stored in the variable WeekNumber]
<xsl:variable name="WeekNumber">
<xsl:call-template name="calculate-week-number">
<xsl:with-param name="day" select="day-from-date($Start_Date)"/>
<xsl:with-param name="month" select="month-from-date($Start_Date)"/>
<xsl:with-param name="year" select="year-from-date($Start_Date)"/>
</xsl:call-template>
</xsl:variable>
No comments:
Post a Comment