在xslt中找到2个日期之间的天数差异是不是很少?如果是这样,你可以指出我正确的方向。我收到格式为mm / dd / yyyy的日期。
答案 0 :(得分:6)
XSLT 1.0的一个更好(更短)的替代方案是计算等效的Julian日期并减去它们。
模板:
<xsl:template name="calculate-julian-day">
<xsl:param name="year"/>
<xsl:param name="month"/>
<xsl:param name="day"/>
<xsl:variable name="a" select="floor((14 - $month) div 12)"/>
<xsl:variable name="y" select="$year + 4800 - $a"/>
<xsl:variable name="m" select="$month + 12 * $a - 3"/>
<xsl:value-of select="$day + floor((153 * $m + 2) div 5) + $y * 365 + floor($y div 4) - floor($y div 100) + floor($y div 400) - 32045"/>
用法:
<xsl:variable name="dateInv" select="'20120406'" />
<xsl:call-template name="calculate-julian-day">
<xsl:with-param name="year" select="substring($date,1,4)"/>
<xsl:with-param name="month" select="substring($date,5,2)"/>
<xsl:with-param name="day" select="substring($date,7,2)"/>
</xsl:call-template>
重复第二个日期,你将有两个整数。然后,简单地减去它们。
答案 1 :(得分:6)
使用以下表达式可以轻松完成:
days-from-duration(xs:date('yyyy-MM-dd')-xs:date('yyyy-MM-dd'))
例如:
days-from-duration(xs:date('2012-06-30')-xs:date('2012-06-18'))
会给出 12
的结果答案 2 :(得分:4)
使用XSLT 2.0(XPath 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="my:my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="vDate1"
select="my:dateFromUsDate(/*/d1)"/>
<xsl:variable name="vDate2"
select="my:dateFromUsDate(/*/d2)"/>
<xsl:sequence select=
"($vDate1 - $vDate2) div xs:dayTimeDuration('P1D')"/>
</xsl:template>
<xsl:function name="my:dateFromUsDate" as="xs:date">
<xsl:param name="pUsDate" as="xs:string"/>
<xsl:sequence select=
"xs:date(concat(substring($pUsDate,7,4),
'-',
substring($pUsDate,1,2),
'-',
substring($pUsDate,4,2)
)
)
"/>
</xsl:function>
</xsl:stylesheet>
将此转换应用于以下XML文档时:
<t>
<d1>04/06/2011</d1>
<d2>01/11/2010</d2>
</t>
生成了想要的正确结果(差异为450天):
450