Twig date difference

丶灬走出姿态 提交于 2019-12-17 18:51:12

问题


I've got an entity with a starting date and an ending date.

Is it possible to get the difference in time between them by using twig?


回答1:


Since PHP 5.3 There is another option without to write an extension.

This example show how to calc the plural day/days

{# 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 %}

Explanation:

PHP 5.3 DateTime object has diff() method which return a DateInterval object with the result difference between endDate and beginDate Twig

Twig date function always return a DateTime object so we can call diff method

Finally we can access to the properties of the DateInterval object or format it with the Twig date filter.

Note: There is no need of wrap endDate or startDate with the date function if the variable is already a DateTime object.

Note2: DateTime is used here as a synonym of DateTimeInterface.




回答2:


There's no built-in function to do that, but you can easily do it yourself, extending twig is easy!

The quick'n'easy way is to do it with twig's simple function class:

$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);

The reusable way is to create a twig extension (documented on the same link). That's still easy.




回答3:


Also note there is an existing Date extension from Sensio Labs that offer a time_diff filter.

Then you can use it like this:{{ entity.ending_date|time_diff(entity.starting_date) }}



来源:https://stackoverflow.com/questions/15657687/twig-date-difference

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!