В Drupal 10/11 при работе с шаблонами Twig часто требуется вывести дату в нужном формате — будь то текущая дата, дата из поля сущности или timestamp. Для этого можно использовать стандартный Twig-фильтр date
, а также функцию format_date()
.
В этой статье разберём основные варианты с примерами, в том числе:
- использование форматов из админки
/admin/config/regional/date-time
. - получение текущего timestamp;
- вывод даты в любом формате PHP;
- локализация с помощью
format_date()
; - работа с датами в ISO-формате;
Получение текущего времени в Unix timestamp
Twig в Drupal умеет работать со специальным значением 'now'
, которое означает текущее время. Чтобы получить timestamp (количество секунд с 1 января 1970 г.), используется формат U
:
1 |
{{ 'now'|date('U') }} |
Это аналог вызова time()
в PHP — выведет текущий timestamp.
Форматирование даты с помощью фильтра date
Фильтр date
позволяет преобразовать дату или timestamp в строку по любому шаблону, поддерживаемому PHP-функцией date()
.
Примеры:
1 2 3 4 5 |
{# Текущая дата в формате дд.мм.гггг #} {{ 'now'|date('d.m.Y') }} {# Дата из поля node.field_date (timestamp) в формате 15-08-2025 #} {{ node.field_date.value|date('d-m-Y') }} |
Плюсы:
- Работает «из коробки» в Drupal.
- Поддерживает все форматы PHP
date()
.
Минусы:
- Не учитывает языковые локализации (месяцы/дни на русском не появятся автоматически).
Локализованное форматирование с format_date()
Drupal предоставляет функцию format_date()
, которая умеет выводить даты с учётом языковых настроек сайта (локализация).
Синтаксис:
1 |
format_date(timestamp, type, format = '', timezone = NULL, langcode = NULL) |
timestamp
— число в секундах (Unix timestamp).type
— предустановленный формат (short
,medium
,long
,custom
).format
— свой шаблон даты (используется только приtype = 'custom'
).timezone
— часовой пояс (опционально).
Пример: дата на русском языке
1 2 |
{{ 'now'|date('U')|format_date('custom', 'j F Y', 'Europe/Moscow', 'ru') }} {# пример вывода: 8 августа 2025 #} |
Здесь:
'now'|date('U')
— текущий timestamp.'custom'
— говорим, что используем свой формат.'j F Y'
— день без ведущего нуля, полное название месяца, год.- ‘Europe/Moscow’ — часовой пояс Москвы.
'ru'
— вывод на русском языке (если настроена локализация).
Нужен ли Twig Tweak для работы с датой?
Twig Tweak — это модуль, предоставляющий дополнительные функции и фильтры для работы с Twig. Однако format_date()
— это встроенный фильтр Drupal и не требует установки Twig Tweak для работы.
Модуль Twig Tweak может понадобиться для других полезных функций, таких как drupal_view()
, file_url()
, dpm()
и т.д., но для использования format_date()
достаточно стандартной установки Drupal.
Работа с датами из поля ноды (ISO 8601 → timestamp)
В Drupal поля даты в Twig-шаблоне могут быть доступны как строки в ISO-формате.
Например:
1 2 |
{{ node.field_date.value }} {# может вернуть - 2025-08-08T19:00:00 #} |
Для преобразования в читаемую дату (без локализации) подойдет фильтр date
, он умеет напрямую работать с ISO-датами:
1 2 |
{{ node.field_date.value|date('d.m.Y H:i') }} {# пример вывода - 08.08.2025 19:00 #} |
Здесь конвертация происходит автоматически.
Для локализованного вывода через format_date()
, нам нужен timestamp. Превращаем ISO в timestamp с помощью фильтра date('U')
:
1 2 |
{{ node.field_date.value|date('U')|format_date('custom', 'j F Y', '', 'ru') }} {# пример вывода - 8 августа 2025 #} |
Использование предустановленных форматов из настроек Drupal
В Drupal есть страница Конфигурация → Региональные настройки → Форматы даты и времени
(/admin/config/regional/date-time
), где можно создать собственные именованные форматы даты.
Например, вы можете создать формат:
- Машинное имя:
my_custom_date
- Формат:
l, j F Y
(пятница, 8 августа 2025)
После этого его можно использовать в Twig через format_date()
.
1 2 3 4 |
{# с локализацией #} {{ format_date(node.field_date.value|date('U'), 'my_custom_date') }} {# без локализации #} {{ format_date('now'|date('U'), 'my_custom_date') }} |
Плюсы:
- Форматы меняются централизованно в админке, без правки шаблонов.
- Удобно для мультиязычных сайтов: перевод названий месяцев/дней управляется Drupal.
- Поддерживает часовые пояса и локализацию.