格式化并在xslt中显示日期时间

时间:2011-10-18 10:12:21

标签: xml xslt xpath

我有一个带有日期时间数据的XML:

<A>
    <StartDate>2011-11-01T00:00:00</StartDate>
    <EndDate>2011-11-30T00:00:00</EndDate>
    <IsRecurring>false</IsRecurring>
</A>

我需要在xslt中只使用以下格式的日期:

01/11/2011 - 30/11/2011

当我这样做时:

<xsl:value-of select="A/StartDate/"> - <xsl:value-of select="A/EndDate/">

我明白了:

2011-11-01T00:00:00 - 2011-11-30T00:00:00

如何正确显示?

3 个答案:

答案 0 :(得分:18)

查看XPath字符串函数:substringsubstring-before等等。

参考:http://www.w3.org/TR/xpath/#section-String-Functions

<xsl:variable name="dt" select="'2011-11-01T12:13:59'"/>

        <xsl:value-of select="concat(
                      substring($dt, 9, 2),
                      '/',
                      substring($dt, 6, 2),
                      '/',
                      substring($dt, 1, 4)
                      )"/>

答案 1 :(得分:13)

编辑:如果您仍然需要使用XSLT 1.x ,则可以查看EXSLT's date:format-date user function。在这种情况下,模式为dd/MM/yyyy

如果您使用的是XSLT 2.0 ,则使用format-dateTime功能会更方便。

以下是您在XSLT 2.0中的示例:

<xsl:value-of select="format-dateTime(A/StartDate, '[D01]/[M01]/[Y0001]')" /> 
- <xsl:value-of select="format-dateTime(A/EndDate, '[D01]/[M01]/[Y0001]')" />

答案 2 :(得分:0)

除了@Kirill Polishchuk,如果你使用的是XSLT 2.0,你可以简单地做一个替换:

substring(replace($input, "(\d{4})-(\d{2})-(\d{2})", "$3/$2/$1"), 0, 11)

其中$input是包含日期的节点内容。