xslt - 减去天数

Mat*_*ttM 10 math xslt date

是否可以使用xslt获取日期字段并从中减去N天数?如果是的话,请你举个例子吗?

Dim*_*hev 17

这是一个演示如何在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">
 <xsl:output method="text"/>

 <xsl:template match="/">
  <xsl:variable name="vToday" select="current-date()"/>

  Today is: <xsl:sequence select="$vToday"/>
  30 days ago it was: <xsl:sequence select=
    "$vToday -30*xs:dayTimeDuration('P1D')"/>
  365 days ago it was: <xsl:sequence select=
    "$vToday -365*xs:dayTimeDuration('P1D')"/>
 </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

当此转换应用于任何XML文档(未使用)时,将生成所需的正确结果:

  Today is: 2010-10-07-07:00
  30 days ago it was: 2010-09-07-07:00
  365 days ago it was: 2009-10-07-07:00
Run Code Online (Sandbox Code Playgroud)


Mad*_*sen 6

是的,使用XSLT 2.0,这是可能的,并且非常容易.

XPATH 2.0中有许多日期/时间/持续时间函数,它们是XSLT 2.0的一部分.

此示例从2010-01-01日期减去1天,以生成2009-12-31:

<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="/">
  <xsl:value-of select="xs:date('2010-01-01') - xs:dayTimeDuration('P1D')" />
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)