希望有人可以提供幫助。我試圖比較XML文件中的2個日期,並使用XSLT進行一些計算:date在xslt中減去另一個日期
例如,我在XML中有2個日期:2011-05-23和2011-04-29。我想要做的計算裏面XSLT象下面這樣:
( '2011-05-23' - '2011-04-29')* 30 = 24 * 30 = 720
誰能有何啓示?
希望有人可以提供幫助。我試圖比較XML文件中的2個日期,並使用XSLT進行一些計算:date在xslt中減去另一個日期
例如,我在XML中有2個日期:2011-05-23和2011-04-29。我想要做的計算裏面XSLT象下面這樣:
( '2011-05-23' - '2011-04-29')* 30 = 24 * 30 = 720
誰能有何啓示?
這可能值得看看EXSLT - date:difference解決方案。我相信應該做你想做的事情,甚至還有一個可用的XSLT實現。
請注意,雖然返回的值是按照XML Schema Part 2: Datatypes Second Edition中指定的持續時間格式,所以很可能您需要處理結果以推導出您希望用於計算的單位(例如,在上面的示例中,預計結果詳細說明天數的差異 - 所以你需要將你想要的相關單位取出來,結果從日期:差異很可能是「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>
他們有點拗口,但他們會計算秒/天數自午夜1日1970年1月爲一個整數,然後你可以直接進行算術運算。他們依賴的日期格式爲yyyy-mm-dd hh:mm:ss
,但對子串調用參數的操縱應允許您以任何您需要的格式處理日期。
的XSLT 2.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
P24D
(24天)days-from-duration()
從xdt:dayTimeDuration
(24)24*30=720
)如果XSLT 2.0可用於解決您的問題,則爲+1。 – 2011-05-15 09:26:07
如果XSLT2.0可以被我使用,我該如何處理? – user752611 2011-05-16 12:46:03
XSLT 2.0是您的選擇嗎? – 2011-05-13 20:39:04
我如何知道XSLT 2.0是否可用在我的服務器上? – user752611 2011-05-16 12:45:42
找出您正在使用的XSLT引擎,並驗證其功能。檢查當前環境中是否支持XSLT 2.0的最快/最簡單的方法是嘗試執行2.0版樣式表,如我發佈的樣式表,該樣式表利用2.0功能。 1.0處理器將無法成功運行它,並會拋出關於不受支持的XSLT/XPath 2.0函數的錯誤。 – 2011-05-16 16:35:14