我正在使用XSLT 2.0,并且我正在尝试计算WS-Trust消息,其中包含&和ft和元素,所以我需要确定两个日期/时间戳之间的分数天数例如,在:
之间2014-06-28T03:00:12Z和2014-06-26T13:00:02Z
我尝试过使用:
<xsl:sequence select="fn:days-from-duration(xs:dateTime('2014-06-26T13:00:02Z')-xs:dateTime('2014-06-27T13:00:02Z'))"/>
但上面只是继续给我&#34; -1&#34;,即一个整数。
如果我可以得到小时或分钟的持续时间,我可能会计算小数天数,但我尝试使用:
<xsl:sequence select="fn:hours-from-duration(xs:dateTime('2014-06-26T13:00:02Z')-xs:dateTime('2014-06-27T13:00:02Z'))"/>
或:
<xsl:sequence select="fn:minutes-from-duration(xs:dateTime('2014-06-26T13:00:02Z')-xs:dateTime('2014-06-27T13:00:02Z'))"/>
那些只是给我&#34; 0&#34;。
有谁能告诉我如何计算持续时间或小时数?
谢谢!
答案 0 :(得分:1)
days-from-duration()
,hours-from-duration()
和minutes-from-duration()
是提取函数:每个函数从一个持续时间中提取单个组件。在您的示例中,您分别得到-1,0和0,因为两个dateTimes之间的持续时间为-1天,0小时和0分钟。
如果您想将持续时间计算为小数天,请尝试:
<xsl:variable name="duration" select="xs:dateTime('2014-06-27T12:36:00Z')-xs:dateTime('2014-06-26T00:00:00Z')" />
<xsl:value-of select="days-from-duration($duration) + hours-from-duration($duration) div 24 + minutes-from-duration($duration) div 1440"/>
这会返回1.525
,表示P1DT12H36M
的持续时间(1天,12小时36分钟)。
答案 1 :(得分:1)
减去两个dateTime值以获取dayTimeDuration,然后将其除以xs:dayTimeDuration('P1D')
(使用div
运算符)以获得xs:double的天数。