如何在XSLT中将日期增加1天

5

我有一个场景,需要在现有日期上增加1天。比如,在<subscriptionDate>2015-05-06</subscriptionDate>中,我想增加1天,并将其值映射到<terminationDate>2015-05-07</terminationDate>。我该如何使用XSLT实现这个功能?因此,还需要处理所有日期约束条件。例如,如果日期是31,则应该在月份中递增。

<Subscription code="12345678R1">
      <userAccount>40000005b</userAccount>
      <offerTemplate>Test</offerTemplate>
      <subscriptionDate>2015-05-06</subscriptionDate>
      <terminationDate></terminationDate>
</Subscription>

2
请在XSLT 1.0和XSLT 2.0之间选择一个,不要同时使用。在这种情况下会有很大的区别。 - michael.hor257k
2个回答

6
假设您使用XSLT 2.0,您可以将持续时间添加到日期中,例如:
<xsl:template match="terminationDate">
  <xsl:copy>
    <xsl:value-of select="xs:date(preceding-sibling::subscriptionDate) + xs:dayTimeDuration('P1D')"/>
  </xsl:copy>
</xsl:template>

请查看http://xsltransform.net/pPqsHTP


@Martin,如果日期格式如下:2015-05-03T00:00:00Z,我们该如何递增日期? - omer khalid
2
@omerkhalid,这是一个 xs:dateTime,所以你可以使用 xs:dateTime('2015-05-03T00:00:00Z') + xs:dayTimeDuration('P1D') 来获取添加了持续时间的新的 xs:dateTime - Martin Honnen

1
我可以补充一下,之前我一直在敲代码,直到意识到缺少了xs:命名空间。我通常只使用xsl:函数。 xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0"> 如果没有声明xs:date函数和xs:dayTimeDuration函数将无法使用。
此外,这是IBM关于类型的资源。

https://www.ibm.com/docs/en/i/7.2?topic=system-date-time-data-types


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接