我对XSLT有疑问。
在网站上我有一个简单的日历,显示将来发生的事件。
但是当一个事件完成后,它应该从我的列表中删除。完成后我的意思是,事件的日期已经过了今天的日期。
每个活动都附有日期。
查看下面的代码:
<xsl:for-each select="$currentPage//node[@template='1238']">
<xsl:sort data-type="text" select="./data[@alias='dato']" order="ascending"/>
<div class="aktivitet_forside">
...MY EVENT CONTENT...
</div>
</xsl:for-each>
上面的代码会显示所有带有template ='1238'的事件,这也是正确的,因为那是我事件的模板。
但正如我之前提到的,每个事件都有一个包含日期的字段。该字段称为“dato”。这也是我之后对事件进行排序的数字,因此具有最接近今天的日期的事件将显示在列表的顶部。
“dato”-field的格式为:2009-08-30T08:59:00
如何自动删除“日期”字段值超过今天日期的事件?
因此,如果今天的日期是:2009年9月3日,那么日期为2009年8月30日的活动不应该列在清单上。
答案 0 :(得分:2)
假设您使用的是XSLT 1.0,如果您的XSLT处理器支持EXSLT扩展,您可以使用date:difference函数。还有一个普通的XSLT模板,如果您没有本地可用的EXSLT,您可以根据自己的方案进行调整。
http://www.exslt.org/date/functions/difference/index.html
编辑:
可能有另一个更简单的版本,您将日期时间字符串转换为格式为YYYYMMDDHHMMSS的数字。这将以数字升序自动排序(未来日期/时间将比之前的日期更大),然后您可以以相同的方式获取当天的日期时间字符串并执行常规数字差异以查看是否有一天是在当前日期之前或之后。
<xsl:variable name="newFormat" select="translate('2009-08-30T08:59:00', '-T:', '')"/>
Gives 20090830085900
在你的XPath中,你可以这样做,假设$ currDateTime被设置为正确的翻译值并且<data>
节点有要检查的日期,你可以使用下面的..
<xsl:for-each select="$currentPage//node[@template='1238'][data[@alias='dato' and ((number(translate(. ,'-T:', '')) - number($now)) >=0)]]">