小枝的日期差异
答
有没有内置的功能来做到这一点,但你可以很容易地自己做,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
对象与endDate
和beginDate
嫩枝之间的结果差
小枝date
函数总是返回DateTime
对象,所以我们可以调用diff
方法
最后,我们可以访问DateInterval
对象的属性或使用Twig date
过滤器对其进行格式化。
注意:如果变量已经是DateTime
对象,则不需要将endDate
或startDate
与date
函数包装在一起。
注2:DateTime
在此用作DateTimeInterface
的同义词。
答
另请注意,Sensio实验室现有的Date extension提供time_diff过滤器。
然后你可以使用它像这样:{{ entity.ending_date|time_diff(entity.starting_date) }}
这样确实像是在做梦,但如果这两个日期之间的差异将是一个多月的时间,使用.days代替.D,只有.D返回天数部分,即如果差额为1个月,1天,.d将为1,但日期为32(假设为31天的月份)。 '{%set leftDays = difference.days%}' – 2014-12-22 15:07:23
要得到生日{{date().diff(date(item.birth))。y}} – dikirill 2014-12-26 20:33:02
但是开始日期和结束日期的任一位置都会导致一天内。你如何确定它是一天还剩一天(+1),还是一天结束(-1)? – Pathros 2016-04-25 16:48:56