我对Freemarker非常陌生,所以对这种语言并不是很了解。
我正在尝试编写要在PDF发票模板中使用的IF语句。我已经拥有的代码如下:
<#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,请输入增值税登记号码。如果sub不是DBL,请输入VAT No:Applied For。消息。
但是我想更改此项以包含日期,因此逻辑表明如果开票国家/地区为ZA且子公司为DBL,请输入VAR Reg No.如果子项不是DBL,则日期为在2017年4月1日之前输入消息,但如果日期是01.04.2017或之后,请输入增值税注册号。 YYYYYYYYY。
有什么想法吗?
答案 0 :(得分:0)
首先,这种业务逻辑通常在模板中没有位置。模板应侧重于演示。
但是,让我们假设你真的必须在模板中这样做。
通常的比较运算符(<
,<=
,>
,>=
,==
)适用于日期/时间值。例如,您可以执行以下操作:
<#if someDate < '2017-04-01'?date.iso>
before
<#else>
after
</#if>
但要注意时区的细微之处。当比较时间值时,首先将它们转换为自UTC时区中的纪元以来的毫秒,然后比较两个时间戳。因此,我们将someDate
与2017-04-01T00:00:00
进行比较,其中最后一个被解释为在为FreeMarker设置的默认时区。因此,我建议将01.04.2017作为java.util.Date
放入数据模型中,从而确保它与其他日期位于同一区域。所以你最终得到<#if someDate < vatPolicyChangeDate>
。