EXSLT - date:month-name - EXSLT Function Implementation

Supported Version: 2
XML Definition: date.month-name.xml
Source: date.month-name.function.xsl

This implementation relies on date:date-time() being available in order to get the current date/time. If it isn't, it uses the global parameter $date:date-time as the current date/time.

Source

<xsl:param name="date:date-time"
           select="'2000-01-01T00:00:00Z'" />
<date:months>
   <date:month abbr="Jan">January</date:month>
   <date:month abbr="Feb">February</date:month>
   <date:month abbr="Mar">March</date:month>
   <date:month abbr="Apr">April</date:month>
   <date:month abbr="May">May</date:month>
   <date:month abbr="Jun">June</date:month>
   <date:month abbr="Jul">July</date:month>
   <date:month abbr="Aug">August</date:month>
   <date:month abbr="Sep">September</date:month>
   <date:month abbr="Oct">October</date:month>
   <date:month abbr="Nov">November</date:month>
   <date:month abbr="Dec">December</date:month>
</date:months>
<func:function name="date:month-name">
   <xsl:param name="date-time">
      <xsl:choose>
         <xsl:when test="function-available('date:date-time')">
            <xsl:value-of select="date:date-time()" />
         </xsl:when>
         <xsl:otherwise>
            <xsl:value-of select="$date:date-time" />
         </xsl:otherwise>
      </xsl:choose>
   </xsl:param>
   <xsl:variable name="neg"
                 select="starts-with($date-time, '-') and                                      not(starts-with($date-time, '--'))" />
   <xsl:variable name="dt-no-neg">
      <xsl:choose>
         <xsl:when test="$neg or starts-with($date-time, '+')">
            <xsl:value-of select="substring($date-time, 2)" />
         </xsl:when>
         <xsl:otherwise>
            <xsl:value-of select="$date-time" />
         </xsl:otherwise>
      </xsl:choose>
   </xsl:variable>
   <xsl:variable name="dt-no-neg-length"
                 select="string-length($dt-no-neg)" />
   <xsl:variable name="timezone">
      <xsl:choose>
         <xsl:when test="substring($dt-no-neg, $dt-no-neg-length) = 'Z'">Z</xsl:when>
         <xsl:otherwise>
            <xsl:variable name="tz"
                          select="substring($dt-no-neg, $dt-no-neg-length - 5)" />
            <xsl:if test="(substring($tz, 1, 1) = '-' or                             substring($tz, 1, 1) = '+') and                           substring($tz, 4, 1) = ':'">
               <xsl:value-of select="$tz" />
            </xsl:if>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:variable>
   <xsl:variable name="month">
      <xsl:if test="not(string($timezone)) or                     $timezone = 'Z' or                      (substring($timezone, 2, 2) &lt;= 23 and                      substring($timezone, 5, 2) &lt;= 59)">
         <xsl:variable name="dt"
                       select="substring($dt-no-neg, 1, $dt-no-neg-length - string-length($timezone))" />
         <xsl:variable name="dt-length"
                       select="string-length($dt)" />
         <xsl:choose>
            <xsl:when test="substring($dt, 1, 2) = '--' and                             substring($dt, 3, 2) &lt;= 12 and                             substring($dt, 5, 1) = '-' and                             (substring($dt, 6) = '-' or                              ($dt-length = 7 and                               substring($dt, 6) &lt;= 31))">
               <xsl:value-of select="substring($dt, 3, 2)" />
            </xsl:when>
            <xsl:when test="number(substring($dt, 1, 4)) and                             substring($dt, 5, 1) = '-' and                             substring($dt, 6, 2) &lt;= 12 and                             ($dt-length = 7 or                              (substring($dt, 8, 1) = '-' and                               substring($dt, 9, 2) &lt;= 31 and                               ($dt-length = 10 or                                (substring($dt, 11, 1) = 'T' and                                 substring($dt, 12, 2) &lt;= 23 and                                 substring($dt, 14, 1) = ':' and                                 substring($dt, 15, 2) &lt;= 59 and                                 substring($dt, 17, 1) = ':' and                                 substring($dt, 18) &lt;= 60))))">
               <xsl:value-of select="substring($dt, 6, 2)" />
            </xsl:when>
         </xsl:choose>
      </xsl:if>
   </xsl:variable>
   <func:result select="string(document('')/*/date:months/date:month[number($month)])" />
</func:function>

Change History

Previous Version: date.month-name.1.html

VersionModifiedByDetails
22001-06-11Jeni Tennison
  • Removed second (optional date format) argument.
  • Added implementations in Javascript, XSLT and EXSLT - Functions.
2.12001-06-16Jeni Tennison
  • Updated Javascript implementation.
  • Added Microsoft-specific stylesheet.
2.22001-07-20Jeni Tennison
  • If the date format passed as an argument is invalid, the function should return an empty string.
  • Added vendor implementation in Saxon 6.4.2
2.32002-08-21Craig Stewart

Added Xalan-J, libxslt and 4XSLT implementation to the list.

2.42002-11-12Craig Stewart

Updated 4XSLT version to 0.12.0a3.

http://www.exslt.org/date/functions/month-name/date.month-name.function.xsl.html last modified 2002-11-12