树枝日期差异

时间:2013-03-27 11:25:52

标签: datetime twig datediff

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

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

4 个答案:

答案 0 :(得分:66)

自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个对象,结果差异在endDatebeginDate之间 Twig

Twig date函数始终返回DateTime个对象,因此我们可以调用diff方法

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

注意:如果变量已经是endDate对象,则不需要使用startDate函数包裹dateDateTime

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

答案 1 :(得分:13)

没有内置功能可以做到这一点,但您可以轻松自己完成,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);

可重用的方法是创建一个枝条扩展(在同一链接上记录)。这仍然很容易。

答案 2 :(得分:2)

另请注意,Sensio Labs现有Date extension提供了time_diff过滤器。

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

答案 3 :(得分:0)

对于 Symfony 5,我建议使用 KnpTimeBundle

它提供了树枝函数|ago

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