2017-04-11 188 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>