2013-03-27 87 views

回答

12

有沒有內置的功能來做到這一點,但你可以很容易地自己做,extending twig很容易!

的quick'n'easy方法是用樹枝的簡單函數的類做到這一點:

$function = new Twig_SimpleFunction('date_difference', function ($start, $end) { 
    // ... calculate difference and return it 
}); 

// assuming $twig is an instance of Twig_Environment 
$twig->addFunction($function); 

的可重複使用的方法是創建一個樹枝延伸(記錄了同一鏈路上)。這仍然很容易。

50

自PHP 5.3以來有另一種選擇,不寫擴展名。

這個例子展示瞭如何calc下的多個天/天

{# endDate and startDate are strings or DateTime objects #} 
{% set difference = date(endDate).diff(date(startDate)) %} 
{% set leftDays = difference.days %} 
{% if leftDays == 1 %} 
    1 day 
{% else %} 
    {{ leftDays }} days 
{% endif %} 

說明:

PHP 5.3 DateTime對象具有diff()方法,該方法返回一個DateInterval對象與endDatebeginDate 嫩枝之間的結果差

小枝date函數總是返回DateTime對象,所以我們可以調用diff方法

最後,我們可以訪問DateInterval對象的屬性或使用Twig date過濾器對其進行格式化。

注意:如果變量已經是DateTime對象,則不需要將endDatestartDatedate函數包裝在一起。

注2:DateTime在此用作DateTimeInterface的同義詞。

+3

這樣確實像是在做夢,但如果這兩個日期之間的差異將是一個多月的時間,使用.days代替.D,只有.D返回天數部分,即如果差額爲1個月,1天,.d將爲1,但日期爲32(假設爲31天的月份)。 '{%set leftDays = difference.days%}' – 2014-12-22 15:07:23

+0

要得到生日{{date().diff(date(item.birth))。y}} – dikirill 2014-12-26 20:33:02

+0

但是開始日期和結束日期的任一位置都會導致一天內。你如何確定它是一天還剩一天(+1),還是一天結束(-1)? – Pathros 2016-04-25 16:48:56

2

另請注意,Sensio實驗室現有的Date extension提供time_diff過濾器。

然後你可以使用它像這樣:{{ entity.ending_date|time_diff(entity.starting_date) }}