想知道如何在xslt中将2009-09-18转换为9月18日? 感谢。
答案 0 :(得分:5)
这是一个纯XSLT 1.0解决方案,它假定有效输入:
<xsl:template match="/">
<newdate>
<xsl:call-template name="convertdate">
<xsl:with-param name="date" select="date"/>
</xsl:call-template>
</newdate>
</xsl:template>
<xsl:template name="convertdate">
<xsl:param name="date"/>
<xsl:variable name="day">
<xsl:value-of select="number(substring-after(substring-after($date,'-'), '-'))"/>
</xsl:variable>
<xsl:variable name="suffix">
<xsl:choose>
<xsl:when test="$day = '1'">st</xsl:when>
<xsl:when test="substring($day, string-length($day), 1) = '1' and not(starts-with($day, '1'))">st</xsl:when>
<xsl:when test="substring($day, string-length($day), 1) = '2' and not(starts-with($day, '1'))">nd</xsl:when>
<xsl:when test="substring($day, string-length($day), 1) = '3' and not(starts-with($day, '1'))">rd</xsl:when>
<xsl:otherwise>th</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="mo">
<xsl:value-of select="number(substring-before(substring-after($date,'-'), '-'))"/>
</xsl:variable>
<xsl:variable name="month">
<xsl:choose>
<xsl:when test="$mo = 1">Jan</xsl:when>
<xsl:when test="$mo = 2">Feb</xsl:when>
<xsl:when test="$mo = 3">Mar</xsl:when>
<xsl:when test="$mo = 4">Apr</xsl:when>
<xsl:when test="$mo = 5">May</xsl:when>
<xsl:when test="$mo = 6">Jun</xsl:when>
<xsl:when test="$mo = 7">Jul</xsl:when>
<xsl:when test="$mo = 8">Aug</xsl:when>
<xsl:when test="$mo = 9">Sept</xsl:when>
<xsl:when test="$mo = 10">Oct</xsl:when>
<xsl:when test="$mo = 11">Nov</xsl:when>
<xsl:when test="$mo = 12">Dec</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="$day"/><xsl:value-of select="$suffix"/> <xsl:value-of select="$month"/>
</xsl:template>
答案 1 :(得分:1)
EXSLT有一些用于转换日期字符串的扩展函数,请参阅: http://exslt.org/date/index.html
幸运的是,您的XSLT处理器本身支持这些,否则大多数日期函数都有一个简单的XSLT 1.0实现,您可以包含
答案 2 :(得分:0)
你的后端是什么语言?
如果是PHP,可以使用date()函数轻松格式化DATETIME字符串:http://uk.php.net/manual/en/function.date.php
您可以在将日期传递给XML格式之前格式化日期。
答案 3 :(得分:0)
使用带有大<xsl:choose>
的命名模板听起来像是一个合适的解决方案。棘手的部分是月份名称,其余部分非常简单,对吧?当然,你不 将它与命名模板分开。
答案 4 :(得分:0)
遵循:
<xsl:template name="friendly-date">
<xsl:param name="datestring" select="'yyyy-mm-dd'" />
<xsl:variable name="y" select="number(substring-before($datestring, '-'))" />
<xsl:variable name="r" select="number(substring-after($datestring, '-'))" />
<xsl:variable name="m" select="number(substring-before($r, '-'))" />
<xsl:variable name="d" select="number(substring-after($r, '-'))" />
<xsl:choose>
<xsl:when test="
$y >= 1970 and $y <= 9999
and
$m >= 1 and $m <= 12
and
$d >= 1 and $m <= 31
">
<xsl:value-of select="$d" />
<xsl:text> </xsl:text>
<xsl:choose>
<xsl:when test="$m = 1">
<xsl:value-of select="'Jan'" />
</xsl:when>
<!-- ... insert missing ... -->
<xsl:when test="$m = 12">
<xsl:value-of select="'Dec'" />
</xsl:when>
</xsl:choose>
<xsl:text> </xsl:text>
<xsl:value-of select="$y" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$datestring" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
请注意,这不会检查不可能的日期。如果这可能成为问题,这取决于您的输入。
除此之外,它没有国际日期格式。对于较少的临时解决方案,我建议看看EXSLT,就像其他的一样。