我对这两个模板引擎有一个相当简单的问题 我试图制作一个未来/过去的日期,从现在开始的固定时间,例如18个月前或明天。
我知道可以使用速度/自由标记模板中的java日期对象(类似$date.add(2,-18)
)来执行此操作,但我希望使用DateTool或freemarker核心执行此操作。
我认为这是纯粹的表现形式(只是想想你在飞行预订表格中看到的默认日期),所以我看不出为什么模板引擎不应该这样做的原因。
虽然可以吗?如果是这样,怎么样?
答案 0 :(得分:4)
我知道这篇帖子真的很旧,但对于未来的人们仍在寻找答案:日期操作可以将日期转换为/从毫秒开始:
${(mydate?long - 18 * 86400000)?number_to_date?string("yyyy-MM-dd")}
例如,将从mydate
减去18天。 (请注意,86400000是每天的毫秒数)
答案 1 :(得分:1)
对于freemarker,可能是:Built-ins for dates。
答案 2 :(得分:1)
在Velocity Tools中没有这样的方法。
答案 3 :(得分:1)
您也可以在Velocity中进行,但不能使用DateTool(无论如何都属于Velocity Extras)。
最好使用具有各种实用程序的“Format”对象,这些实用程序仅用于表示目的(您可以看到使用Velocity的各种框架如何使用“Format”对象)。
因此,您的代码看起来像$ format.dateFromNow(),并且仍然会有一个表示方法。
答案 4 :(得分:1)
我发现根据@Stefan Haberl的说法,?long
does work on dates to get the same value as java.util.Date.getTime()
是Long
。但是,我需要更多说明才能比较日期或修改日期。
这是要点:
?long
= java.util.Date.getTime()
返回纪元时间(以毫秒为单位)我喜欢用秒而不是毫秒(不需要多余的零,我不在乎毫秒等)工作,它看起来像这样:
[#function convertToUnix date]
[#return (date?date?long / 1000)]
[/#function]
[#-- Output Unix Timestamp --]
${convertToUnix(.now)}
此时86400
= 1天(因为我们现在处于“秒”状态),因此您只需添加/减去该日期即可。
[#assign
day = 86400
week = 7 * day
avgMonth = 365.25 / 12 * day
testingEndOfDay = convertToUnix(.now) < (convertToUnix(sameDay) + day)
testingYesterday = convertToUnix(.now) < (convertToUnix(yesterday) + day)
]
${testingEndOfDay?c} # true, .now is less than the end of the day
${testingYesterday?c} # false, .now is greater than the end of yesterday
注意:我忽略了一天中的时间,我们收到的日期开始于12:00 AM,并希望在一天结束时检查
.now
。
现在,如果我想从Unix格式中获取日期(以秒为单位),可以使用?number_to_date
builtin
[#assign
nowAsUnix = convertToUnix(.now)
prettyDate = (nowAsUnix * 1000)?number_to_date
]
注意:由于不确定为什么需要很多修改,我愿意接受编辑/改进。\ _(ツ)_ /¯
答案 5 :(得分:0)
您可以编写自己的方法在FreeMarker中使用: http://freemarker.sourceforge.net/docs/pgui_datamodel_method.html
构建一个执行此逻辑的DataAddMethod。