使用XSLT 1.0 &收到日期的格式如下:XSL日期和时间差计算(XSLT 1.0)
20111129060804
,我有一个需要能够计算出他们两个人之间的差异。但是,我不能使用任何扩展。
我也有其他限制,以及:
- 我受限于可能的XSLT内使用的命名空间,
- 并且其中我使用的XSL样式表(第三方应用程序)它 将不能正确处理xsl中的任何包含/导入操作。
因此,实际上,我需要使用的xslt必须非常自包含,因为所调用或引用的任何内容都必须位于xslt本身中。
我曾考虑采取日期&时间&将其转换为朱利安序列号&处理日期数学很像Excel的方式。实施例 -
09/14/2011 08:19:37 = 40800.346956018500000
09/15/2011 12:22:46 = 40801.515810185200000
difference 1 day 4 hours 3 minutes and 9 seconds
difference = 1.168854166666280
其中左一切小数点以天,一切小数点右边是在时间(即0.168854166666280 * 24 = 4.0524999999990680,或4小时,一小时的0.0525%,或3.15分钟)。
有没有人曾经在XSLT 1.0中做过这种类型的已过时日期 - 时间数学而不使用扩展?
如果现有的一组代码可以重新使用,我将不胜感激。
编辑 -
我决定与上面进行,并已打在TIME的转换一个障碍。
我使用的例子是: 开始时间= 8时19分37秒 结束时间=十五时58分33秒
这是7时38分56秒(顺便说一句的持续时间/差,这是仅适用于同一天的计算 - 如果Endtime <开始时间或如果日期> 0,我有它会引发错误)。
到达的时候,我把所有东西都转换成秒&然后做数学。 08:19:37转换为29977(8 * 3600小时+ 19 * 60分钟+秒)。 15:58:33转换为57513(15 * 3600小时+ 58 * 60分钟+秒)。
区别是27536秒。
我得到: 三千六分之二万七千五百三十六= 7.6488888888888888888 < - 整数部分是小时 然后27536的差 - 25200 = 2336 < - 的25200 = 7小时*3600秒 六十〇分之二千三百三十六= 38.93333333333333333 < - - 整数部分是38分钟 然后从上面的差2336 - 2280 = 56秒。
但是,如果我试图抓住这些数字的整数部分,其受四舍五入。
<xsl:template name="time-difference">
<xsl:param name="from-hour"/>
<xsl:param name="from-minute"/>
<xsl:param name="from-second"/>
<xsl:param name="to-hour"/>
<xsl:param name="to-minute"/>
<xsl:param name="to-second"/>
<xsl:variable name="f-secs" select="($from-hour * 3600) + ($from-minute * 60) + ($from-second)"/>
<xsl:variable name="t-secs" select="($to-hour * 3600) + ($to-minute * 60) + ($to- second)"/>
<xsl:variable name="sec-diff" select="$t-secs - $f-secs"/>
<xsl:variable name="daysec-diff" select="format-number(($sec-diff div 86400),'#')"/>
<xsl:variable name="q" select="($sec-diff div 3600)"/>
<xsl:variable name="t-hrs-diff" select="format-number(($sec-diff div 3600),'00')"/>
上述变量q具有7.648888888888888888(这是正确的) 然而,叔小时-DIFF一次号格式发生现在有“08”,在它,使我的时间不正确。
我知道任何其他格式化尝试来获取数字的整数部分将导致四舍五入。
的子,前 & 子,后外 - 这将(我认为)让我有使用在未来的计算之前将结果转换为数字 - 有没有其他办法抓住&未改变的整数部分不必做字符串转换为数字来使用块?