Рейтинг:1

Не удается отформатировать дату в ветке из UTC в локаль пользователя

флаг in

Я пытаюсь отформатировать поле даты из созданного мной типа контента события, чтобы я мог передать дату в средство экспорта событий, которое создает события в календарях, таких как 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? Будет ли это уместно? Я не думаю, что мне нужно создавать модуль только для этой простой проблемы, но я не уверен.

Дайте мне знать, если у вас есть какие-либо выводы или решения любой из моих проблем.

Спасибо,
Таннер

Рейтинг:0
флаг cn

Трудно обрабатывать формат даты Drupals UTC с библиотеками, отличными от Drupal, получить временную метку Unix:

{{ node.field_date.date.gettimestamp }}

Или лучше отформатируйте поля Drupal с помощью средств форматирования полей Drupal. В Twig вы можете использовать |просмотреть фильтр Твиг Твик:

{{ node.field_date[0]|представление }}

Вы можете добавить массив в качестве аргумента для настроек формата поля. Даже если вы хотите решить эту проблему только в коде, временно настройте средство форматирования полей в пользовательском интерфейсе и экспортируйте полученную конфигурацию. Тогда вы знаете настройки для |просмотреть(). Видеть https://git.drupalcode.org/project/twig_tweak/-/blob/3.x/docs/cheat-sheet.md#view

Вы можете делать больше вещей в PHP. Видеть Как получить отформатированную строку даты из объекта DateTimeItem

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.