Я пытаюсь отформатировать поле даты из созданного мной типа контента события, чтобы я мог передать дату в средство экспорта событий, которое создает события в календарях, таких как Google, Apply, Yahoo и Microsoft. я использую calendar_link который занимает несколько полей и даты для создания соответствующего события календаря.
{# calendar_link(link_type, title, start_date, end_date, all_day, description, location) #}
{% set linkGoogle = calendar_link("google", node.field_event_title.value|raw|replace({'[html format="full_html" different_values="0"]': "", '[/html]': "" })|striptags, date(dateStartField), date(dateEndField), false, "", "") %}
{% set linkICS = calendar_link("ics", node.field_event_title.value|raw|replace({'[html format="full_html" different_values="0"]': "", '[/html]': "" })|striptags, date(dateStartField), date(dateEndField), false, "", "") %}
{% set linkYahoo = calendar_link("yahoo", node.field_event_title.value|raw|replace({'[html format="full_html" different_values="0"]': "", '[/html]': "" })|striptags, date(dateStartField), date(dateEndField), false, "", "") %}
{% set linkWebOutlook = calendar_link("webOutlook", node.field_event_title.value|raw|replace({'[html format="full_html" different_values="0"]': "", '[/html]': "" })|striptags, date(dateStartField), date(dateEndField), false, "", "") %}
Это прекрасно работает. Однако, когда я беру поле даты, оно находится в формате UTC, а не в локали пользователя. Я понимаю, почему, потому что Drupal хранит даты в формате UTC в базе данных. (Примечание: node.field_event_start_date.value равно dateStartField, так как я просто выполняю простое форматирование с помощью twig)
{{ node.field_event_start_date.value }}
Я нашел несколько предложений, таких как использование расширения Twig Intl, которое дало бы фильтр Twig, localizeddate или format_datetime (я думаю, что localizeddate — старая версия), но когда я использовал композитор для установки расширений twig (https://twig.symfony.com/doc/3.x/filters/format_datetime.html):
для композитора требуется веточка / intl-extra
композитору требуется веточка/дополнительный пакет
это не работает. Фильтры не распознаются Twig. Я пытался просмотреть информацию из здесь. Я видел, как другие ссылались на идею включения расширений Twig для проектов Symfony, но я не уверен, где это будет на бэкэнде сайта Drupal. См. прикрепленное изображение для ошибки фильтра:
Код с format_datetime, который должен учитывать языковой стандарт пользователя (On https://twig.symfony.com/doc/3.x/filters/format_datetime.html предполагается, что использование по умолчанию format_datetime должно учитывать текущую локаль):
<span>Calendar Start Date TimeZone Format: {{ calStartDate|format_datetime }}</span>
Я почти в своем уме, пытаясь отформатировать мои даты UTC в локализованную дату через Twig, которую я могу передать в экспортер ссылок календаря. Я знаю, что могу отформатировать дату для определенного часового пояса с помощью базовых фильтров Twig, но я не могу проверить, что такое языковой стандарт пользователя, что делает этот подход недействительным, поскольку языковой стандарт будет динамическим, а не статическим.
Есть ли лучший подход? Должен ли я создать хук php, который изменяет поля даты для node--event.html.twig? Будет ли это уместно? Я не думаю, что мне нужно создавать модуль только для этой простой проблемы, но я не уверен.
Дайте мне знать, если у вас есть какие-либо выводы или решения любой из моих проблем.
Спасибо,
Таннер