在 Freemarker 中计算较旧的日期

Calculate an older date in Freemarker

我需要创建一个日历控件来选择出生日期。我的自定义日历控件具有用于设置 minDate 和 maxDate 的字段,可用于设置可选择的日期范围。

我可以将当​​前日期放入变量并将其用作 maxDate,如下所示。

<#assign dateObject=.now/>
<#assign todaysDate=dateObject?date/>

如何以类似的方式计算出大约 100 年前的日期?我通读了官方文档,找不到任何可以做到这一点的操作。

您不应该在 MVC 视图中计算此类内容...要显示的日期范围应来自数据模型。无论如何,你将需要 GregorianCalendar 算术,而 FreeMarker 没有内置这样的东西。但是你可以写一个 Java 方法来做到这一点,然后从模板中调用它。

顺便说一句,这样做的天真方法是 (.now?long - 1000 * 60 * 60 * 24 * daysBefore)?numberToDate。这样做的问题是,如果 .now 接近午夜,并且该范围内的某些天发生夏令时变化,您可能会重复或跳过一天。