2015-09-21 65 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">