小枝的日期差异

问题描述:

我有一个开始日期和结束日期的实体。小枝的日期差异

是否有可能通过使用树枝来获得它们之间的时间差?

有没有内置的功能来做到这一点,但你可以很容易地自己做,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); 

的可重复使用的方法是创建一个树枝延伸(记录了同一链路上)。这仍然很容易。

自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

另请注意,Sensio实验室现有的Date extension提供time_diff过滤器。

然后你可以使用它像这样:{{ entity.ending_date|time_diff(entity.starting_date) }}