Как рассчитать разницу в днях между двумя датами 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).