в Twig как сравнить, если дата находится в течение X дней?
Я использую веточку, чтобы отметить строку в таблице, если дата, связанная с этой строкой, меньше 30 дней.
в документации Twig указано, что для сравнения двух объектов даты сначала необходимо преобразовать объект в дату, а затем выполнить сравнение следующим образом:
{% if date(yourDate) < date(-'30days') %} ... {% endif %}
однако он не указывает, как передать формат даты для левой стороны сравнения, я понимаю, что функция даты Twig является своего рода оболочкой для даты PHP.
в PHP я бы обычно называл:
$myDate = DateTime::createFromFormat("m/d/Y", $myDate);
но в Twig, по-видимому, нет способа указать формат исходной даты, чтобы преобразовать его в другой формат, или, по крайней мере, его нет в документации.
вот что я пробовал:
{% if date(d.LastDate) > date('-30days') %}...{% endif %}
{% if d.LastDate | format("Y-m-d") > date('-30days') %}...{% endif %}
{% if date("m/d/Y", d.LastEmailSentDate) > date('-30days') %}...{% endif %}
эти условия и их изменения возвращает следующее исключение В Symfony2:
An exception has been thrown during the rendering of a template
("DateTimeZone::__construct(): Unknown or bad timezone (---)")
мой контроллер возвращает дату в формате: m/d/Y
и я просто хочу отметить эту строку, если этой дате меньше 30 дней.
3 ответов
сравните две даты, получив количество секунд с эпохи Unix (формат даты PHP U
)
{% if d.LastDate|date("U") > "-30 days"|date("U") %}
<p>Less than 30 days old</p>
{% endif %}
Twig 1.6
поддерживает сравнение дат.
{% if date(d.LastDate) > date("-30 days") %}
<p>Less than 30 days old</p>
{% endif %}
{% if date(d.LastDate) > date("now") %}
<p>Future date</p>
{% endif %}
С PHP 5.3 есть способ с большей точностью.
{# endDate and startDate are strings or DateTime objects #}
{% set difference = date(endDate).diff(date(startDate)) %}
{% set leftDays = difference.days %}
{% if leftDays > 30 %}
Less than 30 days old
{% else %}
More than 30 days old
{% endif %}
объяснение:
PHP 5.3 и diff()
метод, который возвращает DateInterval
объект с разницей результатов между endDate
и beginDate
Прутик!--13-->
веточка date
функция всегда возвращает DateTime
объект, поэтому мы можем назвать diff
метод
наконец, мы можем получить доступ к свойствам DateInterval
объект или отформатировать его с помощью фильтра даты Twig.
Примечание: нет необходимости переносить endDate или startDate с функцией date, если переменная уже является объектом DateTime.
примечание 2: DateTime
используется здесь как синоним DateTimeInterface
.