日期减去xslt中的另一个日期
希望有人能帮忙。我试图比较XML文件中的两个日期,并使用XSLT进行一些计算: 例如,我有两个XML日期:2011-05-23和2011-04-29。我想在XSLT内部进行如下计算: ('2011-05-23'-'2011-04-29')*30=24*30=720日期减去xslt中的另一个日期,xslt,Xslt,希望有人能帮忙。我试图比较XML文件中的两个日期,并使用XSLT进行一些计算: 例如,我有两个XML日期:2011-05-23和2011-04-29。我想在XSLT内部进行如下计算: ('2011-05-23'-'2011-04-29')*30=24*30=720 有人能解释一下吗?这个解决方案可能值得一看。我相信这应该是您想要的,甚至有一个直接的XSLT实现可用 请注意,返回的值是中指定的持续时间格式,因此您可能需要处理结果以导出希望在计算中使用的单位(例如,在上面的示例中,您希望得到一个详细
有人能解释一下吗?这个解决方案可能值得一看。我相信这应该是您想要的,甚至有一个直接的XSLT实现可用
请注意,返回的值是中指定的持续时间格式,因此您可能需要处理结果以导出希望在计算中使用的单位(例如,在上面的示例中,您希望得到一个详细说明天数差异的结果-因此您需要提取您想要使用的相关单元,从日期开始的结果:在这种情况下,差异很可能是“P24D”)。以下是我有时用于日期计算的两个模板:
<xsl:template name="calcseconds">
<xsl:param name="date" />
<xsl:value-of select="(((substring($date,1,4) - 1970) * 365)+floor((substring($date,1,4) - 1970) div 4)+substring('000,031,059,090,120,151,181,212,243,273,304,334,365',substring($date,6,2)*4-3,3)+(substring($date,9,2)-1)+(1-floor(((substring($date,1,4) mod 4) + 2) div 3))*floor((substring($date,6,2)+17) div 20))*86400+(substring($date,12,2)*3600)+(substring($date,15,2)*60)+substring($date,18,2)" />
</xsl:template>
<xsl:template name="calcdays">
<xsl:param name="date" />
<xsl:value-of select="(((substring($date,1,4) - 1970) * 365)+floor((substring($date,1,4) - 1970) div 4)+substring('000,031,059,090,120,151,181,212,243,273,304,334,365',substring($date,6,2)*4-3,3)+(substring($date,9,2)-1)+(1-floor(((substring($date,1,4) mod 4) + 2) div 3))*floor((substring($date,6,2)+17) div 20))" />
</xsl:template>
它们有点多嘴,但它们会将自1970年1月1日午夜以来的秒/天数计算为整数,然后您可以直接对其进行算术运算。它们依赖的日期格式是
yyyy-mm-dd hh:mm:ss
,但对子字符串调用参数的操作应允许您以任何格式处理日期您需要。一个XSLT2.0解决方案
<?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="days-from-duration(
xs:date('2011-05-23')
- xs:date(xs:date('2011-04-29'))
)*30"/>
</xsl:template>
</xsl:stylesheet>
收益率:720
xs:date()
- 从第一个日期减去第二个日期,得到
xdt:dayTimeDuration
(24天)P24D
days-from-duration()
- 然后,您可以使用该数字执行正常的算术运算(例如,
)24*30=720