我有一个有开始日期和结束日期的实体。
是否可以通过使用树枝来获得它们之间的时间差异?
从PHP 5.3开始,还有另一种选择,无需编写扩展名。
此示例显示如何计算复数天/天
{# 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
Twig之间的结果差异
Twig date
函数总是返回一个DateTime
对象,所以我们可以调用diff
方法
最后,我们可以访问DateInterval
对象的属性或使用Twig date
过滤器对其进行格式化。
注意:如果变量已经是endDate
对象,则不需要使用startDate
函数包装date
或DateTime
。
注2:DateTime
在这里用作DateTimeInterface
的同义词。
没有内置功能可以做到这一点,但你可以轻松自己做,extending twig很容易!
快速的方法是使用twig的简单函数类:
$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);
可重用的方法是创建一个枝条扩展(在同一链接上记录)。这仍然很容易。
另请注意,Sensio Labs现有的Date extension提供了time_diff过滤器。
然后你就可以这样使用它:{{ entity.ending_date|time_diff(entity.starting_date) }}