Как рассчитать разницу в днях между двумя датами ISO8601 с помощью Freemarker?
У меня есть объект в Freemarker, который имеет даты в формате ISO8601 (например, 2012-02-01T13:01:02+0000
), как я буду работать над разницей в днях между ним и сейчас?
В других сценариях, отличных от Java, я бы переформатировал его как метку времени unix и сделал математику (как функции distance_of_time_in_words
в RoR или Symfony), однако, насколько я могу видеть, Freemarker не может превратить метку времени ISO8601 в метку времени unix.
И да, я понимаю, что слой шаблона, вероятно, не является правильным местом для этого вроде того, но потребности должны быть и т.д.
1 ответ:
Если под разницей в днях вы подразумеваете, сколько раз 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)
.