[英]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.