У меня есть сущность со стартовой датой и датой окончания.
Можно ли получить разницу во времени между ними, используя 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);
Многоразовый способ заключается в создании расширения ветки (документируется по той же ссылке). Это все еще легко.
Так как 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.
Также обратите внимание, что существует существующее Расширение дат из Sensio Labs, которое предлагает фильтр time_diff.
Затем вы можете использовать его следующим образом: {{ entity.ending_date|time_diff(entity.starting_date) }}