+<xsl:template name="print_date">
+ <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:call-template name="print_month">
+ <xsl:with-param name="month" select="$month"/>
+ </xsl:call-template>
+ <xsl:text> </xsl:text>
+ <xsl:call-template name="print_day">
+ <xsl:with-param name="day" select="$day"/>
+ </xsl:call-template>
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="$year"/>
+</xsl:template>
+
+<xsl:template name="print_month">
+ <xsl:param name="month"/>
+ <xsl:choose>
+ <xsl:when test="$month = '01'">January</xsl:when>
+ <xsl:when test="$month = '02'">February</xsl:when>
+ <xsl:when test="$month = '03'">March</xsl:when>
+ <xsl:when test="$month = '04'">April</xsl:when>
+ <xsl:when test="$month = '05'">May</xsl:when>
+ <xsl:when test="$month = '06'">June</xsl:when>
+ <xsl:when test="$month = '07'">July</xsl:when>
+ <xsl:when test="$month = '08'">August</xsl:when>
+ <xsl:when test="$month = '09'">September</xsl:when>
+ <xsl:when test="$month = '10'">October</xsl:when>
+ <xsl:when test="$month = '11'">November</xsl:when>
+ <xsl:when test="$month = '12'">December</xsl:when>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="print_day">
+ <xsl:param name="day"/>
+ <xsl:choose>
+ <xsl:when test="$day = '01'">1st</xsl:when>
+ <xsl:when test="$day = '02'">2nd</xsl:when>
+ <xsl:when test="$day = '03'">3rd</xsl:when>
+ <xsl:when test="$day = '11'">11th</xsl:when>
+ <xsl:when test="$day = '11'">12th</xsl:when>
+ <xsl:when test="$day = '11'">13th</xsl:when>
+ <xsl:when test="substring($day,2,1) = '1'">
+ <xsl:value-of select="$day"/>
+ <xsl:text>st</xsl:text>
+ </xsl:when>
+ <xsl:when test="substring($day,2,1) = '2'">
+ <xsl:value-of select="$day"/>
+ <xsl:text>nd</xsl:text>
+ </xsl:when>
+ <xsl:when test="substring($day,2,1) = '3'">
+ <xsl:value-of select="$day"/>
+ <xsl:text>rd</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$day"/>
+ <xsl:text>th</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="print_interval">
+ <xsl:param name="begin"/>
+ <xsl:param name="end"/>
+ <xsl:variable name="byear" select="substring($begin,1,4)"/>
+ <xsl:variable name="bmonth" select="substring($begin,5,2)"/>
+ <xsl:variable name="bday" select="substring($begin,7,2)"/>
+ <xsl:variable name="eyear" select="substring($end,1,4)"/>
+ <xsl:variable name="emonth" select="substring($end,5,2)"/>
+ <xsl:variable name="eday" select="substring($end,7,2)"/>
+ <xsl:choose>
+ <xsl:when test="$byear != $eyear">
+ <xsl:call-template name="print_date">
+ <xsl:with-param name="date" select="$begin"/>
+ </xsl:call-template>
+ <xsl:call-template name="print_date">
+ <xsl:text> - </xsl:text>
+ <xsl:with-param name="date" select="$end"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="$bmonth != $emonth">
+ <xsl:call-template name="print_month">
+ <xsl:with-param name="month" select="$bmonth"/>
+ </xsl:call-template>
+ <xsl:text> </xsl:text>
+ <xsl:call-template name="print_day">
+ <xsl:with-param name="day" select="$bday"/>
+ </xsl:call-template>
+ <xsl:text> - </xsl:text>
+ <xsl:call-template name="print_month">
+ <xsl:with-param name="month" select="$emonth"/>
+ </xsl:call-template>
+ <xsl:text> </xsl:text>
+ <xsl:call-template name="print_day">
+ <xsl:with-param name="day" select="$eday"/>
+ </xsl:call-template>
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="$byear"/>
+ </xsl:when>
+ <xsl:when test="$bday != $eday">
+ <xsl:call-template name="print_month">
+ <xsl:with-param name="month" select="$bmonth"/>
+ </xsl:call-template>
+ <xsl:text> </xsl:text>
+ <xsl:call-template name="print_day">
+ <xsl:with-param name="day" select="$bday"/>
+ </xsl:call-template>
+ <xsl:text> - </xsl:text>
+ <xsl:call-template name="print_day">
+ <xsl:with-param name="day" select="$eday"/>
+ </xsl:call-template>
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="$byear"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="print_date">
+ <xsl:with-param name="date" select="$begin"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>