В 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.
- Поддерживает часовые пояса и локализацию.
