XSLT:将double转换为xsl中的日期

时间:2016-11-22 09:51:43

标签: xml date xslt

我想使用这个功能: 持续时间($ newDate - $ oldDate) 计算我的日期和当前日期()($ newDate)之间的差异。

我的问题是这个函数不会占用我的日期,这是double类型。 它的格式为:dd.mm.yyyy($ oldDate)

我的问题是如何将这种格式的双倍转换为日期,以便我可以使用此功能?

1 个答案:

答案 0 :(得分:0)

30.10.2016的值不能是 double 。如果这是您的输入所包含的内容,请将其视为字符串并提取各个组件以组合格式为YYYY-MM-DD的有效日期。

考虑以下示例:

<强> XML

<input>30.10.2016</input>

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="http://www.example.com/my"
exclude-result-prefixes="xs my">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:function name="my:reformat-date">
    <xsl:param name="datestring"/>
    <xsl:variable name="y" select="substring($datestring, 7, 4)"/>
    <xsl:variable name="m" select="substring($datestring, 4, 2)"/>
    <xsl:variable name="d" select="substring($datestring, 1, 2)"/>
    <xsl:sequence select="xs:date(concat($y, '-', $m, '-', $d))" />
</xsl:function>

<xsl:template match="/">
    <difference>
        <xsl:value-of select="days-from-duration(current-date() - my:reformat-date(input))"/>
    </difference>
</xsl:template>

</xsl:stylesheet>

结果(今日适用,2016年11月22日)

<?xml version="1.0" encoding="UTF-8"?>
<difference>23</difference>

请注意,这假设输入的格式为DD.MM.YYYY - 即一位数天和月的前导零。