2015-09-21 66 views
-1

如何將給定日期的年份與int進行比較?如何比較xsl中的日期年?

<if test="year(@varDate)>=1900"> 
true 
</if> 

凡在輸入文件中的日期格式爲:

<date varDate="31/12/1999" /> 
+0

請告訴我們XML輸入其中的日期。 –

+0

您標記了您的問題[tag:xslt-1.0],但您的代碼顯示了'xs:gYear',它是XSLT 2.0的構造函數,是不是要標記爲[tag:xslt-2.0]? – Abel

+0

請向我們展示XML輸入的日期,並指出使用XSLT 1.0還是2.0(在這種情況下會產生很大的差異)。 –

回答

1

如果你被卡住XSLT 1.0,最常見的方式是提取一年的一部分,就像這樣:

substring-before('1994-12-31', '-') 

或者,如果你的格式,讓我們說dd/MM/yyyy,你可以做:

substring-after('31/12/1999', '/') 

在你的情況,這將是類似的規定:

<xsl:if test="substring-after('31/12/1999', '/') > 1900"> 
    true 
</xsl:if> 

既然你沒有提供的輸入數據,我想你可以計算出自己的細節。你原來的問題被標記爲,但這已經改變。如果這意味着你可以使用XSLT 2.0或更高版本,和你有一個實際的類型化xs:date值,你也可以使用fn:year-from-date

<xsl:if test="year-from-date(xs:date('1994-12-31')) > 1900"> 
    true 
</xsl:if> 

因爲有兩條斜線這是遠遠不夠的,使用substring-after(substring-after('31/12/1999', '/'), '/'),如Michael's post(信貸給他)所示。

+0

在XSLT中1。0,轉換爲數字不是必需的。 –

+0

@ michael.hor257k,一如既往,謝謝,更新。 – Abel

+0

@Abel,所以事實證明我的日期格式與上面的解決方案(dd/mm/yyyy)不同。有什麼想法嗎?我應該創建一個新的職位? – Rod

1

事實證明我的日期格式不同於以上解決方案 (dd/mm/yyyy)。

如果這是真的日期格式 - i.e.both天,一個月總是填充到兩位數 - 您可以使用:

<if test="substring(@varDate, 7) >= 1900"> 

爲您的測試。

如果沒有,您需要:

<if test="substring-after(substring-after(@varDate, '/'), '/') >= 1900">