У меня есть сущность со стартовой датой и датой окончания.
Можно ли получить разницу во времени между ними, используя 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) }}