我有一个具有开始日期和结束日期的实体。
是否可以通过使用树枝来获得它们之间的时间差异?
自 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.3DateTime
对象具有diff()
返回对象的方法,其结果与
TwigDateInterval
之间的差异endDate
beginDate
Twigdate
函数总是返回一个DateTime
对象,所以我们可以调用diff
方法
最后,我们可以访问DateInterval
对象的属性或使用 Twigdate
过滤器对其进行格式化。
注意:如果变量已经是一个对象,则不需要 wrapendDate
或startDate
with函数。date
DateTime
注 2:DateTime
此处用作 的同义词DateTimeInterface
。
没有内置函数可以做到这一点,但你可以自己轻松地做到这一点,扩展树枝很容易!
快速简单的方法是使用 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 扩展,它提供了 time_diff 过滤器。
然后你可以像这样使用它:{{ entity.ending_date|time_diff(entity.starting_date) }}
请注意,此插件已被放弃,并且 Twig 3 不支持:https ://packagist.org/packages/twig/extensions