2017-04-11 84 views
0

我对Freemarker非常陌生,所以不太了解这门语言的大量用法。Freemarker IF语句的日期

我想写一个IF语句用在PDF发票模板中。代码我已经有了如下:

<#if record.billcountry == "ZA"> 
<table class="footer" style="width: 100%;"> 
<tr> 
<td align="right"><b><#if record.subsidiary == "DBL">VAT No: GB xxxxxxxxx<br/></#if>VAT No: Applied For.</b> 
</td> 
</tr> 
</table> 
<#elseif record.subsidiary == "DBL"> 
<table class="footer" style="width: 100%;"> 
<tr> 
<td align="right"><b>VAT No: GB xxxxxxxxx</b> 
</td> 
</tr> 
</table> 

以上是说,如果账单国家ZA,而子公司是DBL,输入增值税注册号码。如果该子不是DBL,请输入消息VAT No:Applied For。

但是我想将其更改为包含日期,所以逻辑上说如果开票国家是ZA并且子公司是DBL,请输入VAR注册号。如果子公司不是DBL,并且日期是在2017年4月1日之前输入消息,但如果日期为01.04.2017或之后,请输入VAT Reg no。 YYYYYYYYY。

任何想法?

回答

0

首先,这种业务逻辑通常在模板中没有地方。模板应着重于演示。

但让我们假设你真的必须在模板中做到这一点。 通常的比较运算符(<,<=,>,>=,==)适用于日期/时间值。因此,举例来说,您可以执行以下操作:

<#if someDate < '2017-04-01'?date.iso> 
    before 
<#else> 
    after 
</#if> 

虽然要小心时区细微之处。当对时间值进行比较时,首先将它们转换为自UTC时区的时间点起的毫秒数,然后比较两个时间戳。所以上面我们比较someDate2017-04-01T00:00:00,最后一个被解释为在为FreeMarker设置的默认时区。因此,我建议将01.04.2017作为java.util.Date加入数据模型,从而确保它与其他日期处于同一区域。所以你最终得到了类似<#if someDate < vatPolicyChangeDate>