我在Freemarker中有一个对象,其日期为ISO8601格式(例如2012-02-01T13:01:02+0000
),我如何计算它与现在之间的天数差异?
在其他非Java场景中,我将其重新格式化为unix时间戳并进行数学运算(如RoR或Symfony中的distance_of_time_in_words
函数),但据我所知,Freemarker无法转向ISO8601时间戳到unix时间戳。
是的,我意识到模板层可能不适合做这种事情,但需要等等。
答案 0 :(得分:8)
如果天数不同,则表示两个日期之间经过了24小时的次数,那么这个表达式就是这样(你需要至少FreeMarker 2.3.17 ?long
才能这样工作):
(
(
s2?datetime("yyyy-MM-dd'T'HH:mm:ssZ")?long
- s1?datetime("yyyy-MM-dd'T'HH:mm:ssZ")?long
) / (1000 * 60 * 60 * 24)
)?int
更好的方法是使用Java实现TemplateMethodModelEx
中的函数。模板可以使用<#assign distanceInDays = 'com.example.DistanceInDaysMethod'?new()>
(将其放入常见的#include
- d或#import
- ed文件中),然后您可以将其用作distanceInDays(s1, s2)
。