昨天在XSLT中的日期

时间:2012-09-06 17:14:07

标签: xslt date xslt-1.0

如何在xslt中找到昨天的日期?我想到今天的日期,然后减去一天,但我不知道怎么做而不打破日历。

4 个答案:

答案 0 :(得分:2)

XSLT 2.0中,您可以使用current-dateTime()方法获取当前日期。但是如果您使用XSLT 1.0,则需要使用扩展函数,因为XSLT 1.0不提供任何标准来获取当前日期/时间。 您可以在XSLT 1.0

中使用以下脚本
<ms:script language="javascript" implements-prefix="user">
    function datediff(date1, date2)
    {
        return Math.round(((new Date(date2)) - (new Date(date1))/1000/60);
    }
</ms:script>

答案 1 :(得分:1)

可能你最好的选择是用你的原生编程语言编写扩展,并使用你的母语的datemath库。您可以在http://www.ibm.com/developerworks/library/x-callbk/index.html

了解有关其基础知识的更多信息

这个例子使用Java,但我在.NET中已经使用了很多这个

答案 2 :(得分:1)

另一种选择是使用EXSLT的日期功能扩展名:

date:add(date:date(), '-P1D')

date:date()检索当前日期,date:add()为其添加持续时间。 “-P1D”表示持续时间为-1天。

请注意,这些扩展函数不在XSLT标准中,但可以找到实现,具体取决于您使用的XSLT处理器。 EXSLT函数应该比<ms:*>等处理器特定的函数更便携。

答案 3 :(得分:0)

我只能使用XSLT 1.0才能获得以前的工作日期。结果,我想出了一个转换,可以做到这一点。您可以在Github上检查它:https://github.com/Simbiat/xslt1_previous_day

其背后的逻辑将日期分为3个部分并分别进行操作,同时保持依赖性并处理零。 因此,我首先从日期中减去1,然后,如果我得到0,则从月份中减去1,同时将日期恢复为其最大值(31)。分别对月份和年份进行了相同的操作。对于几天,由于月份的最后一天可以是28、29、30或31,因此还有其他逻辑取决于月份(以及2月的年份)。