[英]Freemarker/Velocity - date manipulation
我知道这是真的很老的帖子,但是对于将来的人们来说,仍然在寻找答案:可以通过将日期转换为毫秒来进行日期操作:
${(mydate?long - 18 * 86400000)?number_to_date?string("yyyy-MM-dd")}
例如将从mydate
减去18天。 (请注意,86400000是每天的毫秒数)
对于freemarker,也许是: 内置日期 。
在Velocity Tools中,没有这种方法。
您也可以在Velocity中完成此操作,但不能使用DateTool(总之属于Velocity Extras)完成此操作。
好的做法是让“格式”对象带有各种实用工具,这些实用工具仅用于演示目的(您可以看到使用Velocity的各种框架如何使用“格式”对象)。
因此,您的代码将类似于$ format.dateFromNow(),并且仍然会有一种表示方法。
我发现每个@Stefan Haberl 都可以在日期上使用?long
来获取与 Long
相同的值与java.util.Date.getTime()
。 但是,我需要更多说明才能比较日期或修改日期。
这是要点:
?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
来将其转换回
[#assign
nowAsUnix = convertToUnix(.now)
prettyDate = (nowAsUnix * 1000)?number_to_date
]
注意 :我可以进行编辑/改进,因为我不确定为什么需要这么多¯\\ _(ツ)_ /¯
您可以编写自己的方法在FreeMarker中使用: http : //freemarker.sourceforge.net/docs/pgui_datamodel_method.html
构建执行此逻辑的DataAddMethod。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.