2011-09-14 49 views
1

使用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」,在它,使我的時間不正確。

我知道任何其他格式化嘗試來獲取數字的整數部分將導致四捨五入。

子,前 & 子,後外 - 這將(我認爲)讓我有使用在未來的計算之前將結果轉換爲數字 - 有沒有其他辦法抓住&未改變的整數部分不必做字符串轉換爲數字來使用塊?

回答

1

嘗試使用floor()截斷值。 (7.64)= 7

(0124)