33

我有一个具有开始日期和结束日期的实体。

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

4

4 回答 4

86

自 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之间的差异endDatebeginDate

Twigdate函数总是返回一个DateTime对象,所以我们可以调用diff方法

最后,我们可以访问DateInterval对象的属性或使用 Twigdate过滤器对其进行格式化。

注意:如果变量已经是一个对象,则不需要 wrapendDatestartDatewith函数。dateDateTime

注 2:DateTime此处用作 的同义词DateTimeInterface

于 2014-11-29T17:44:04.577 回答
13

没有内置函数可以做到这一点,但你可以自己轻松地做到这一点,扩展树枝很容易!

快速简单的方法是使用 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);

可重用的方法是创建一个树枝扩展(记录在同一链接上)。那还是很容易的。

于 2013-03-27T18:20:08.867 回答
3

另请注意,Sensio Labs 提供了一个现有的Date 扩展,它提供了 time_diff 过滤器。

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

请注意,此插件已被放弃,并且 Twig 3 不支持:https ://packagist.org/packages/twig/extensions

于 2015-11-09T15:09:25.300 回答
2

对于 Symfony 5,我建议使用KnpTimeBundle

它提供了树枝功能|ago

安装 :composer require knplabs/knp-time-bundle

于 2021-05-06T14:53:50.140 回答