Как сделать время в ветке без вмешательства часового пояса - PullRequest
0 голосов
/ 07 апреля 2019

Я хочу получить время только из поля даты Drupal и отобразить его в шаблоне ветки отдельно от его даты.

В моем шаблоне ветки для событий у меня в данный момент есть дата, указанная 3 способами:

{{ content }}

отображает все поля. И время (полученное из поля Date) отображается правильно как; 28/04/2019 - 1:11 Это правильное время в соответствии с тем, что было введено при создании контента. На той же странице, при использовании:

{{ content.field_date_start }}

28/04/2019 - 1:11 также отображается исправлено. Но я хочу захватить время только для отображения отдельно от даты поэтому я положил это в веточку:

{{ node.field_date_start.value|date("g:ia") }}

, который отображается как: 3:11 am

Это неверно, выключено на 14 часов (1.11, когда введено было 1.11 вечера)

Как мне отделить время от отдельного дисплея внутри ветки, но также сохранить правильное время в соответствии с тем, как оно было введено.

Как мне ввести это в веточку?

Я не хочу, чтобы время менялось, если люди вводят контент или просматривают контент в разных часовых поясах. Пример - кто-то создает контент в Мельбурне, Австралия, а кто-то другой просматривает его в Лондоне, Англия - время должно отображаться одинаково независимо от того,

1 Ответ

0 голосов
/ 07 апреля 2019

Drupal сохраняет даты в базе данных в соответствии с часовым поясом UTC.Например, если вы введете 09:00 AM в качестве времени пользователя, для которого в профиле выбран часовой пояс Лондона (UTC + 1), оно сохраняется в базе данных как 08:00 AM.То же самое верно, если часовой пояс сайта установлен в Лондон (UTC + 1).

Я бы предложил предварительно обработать поле и установить переменную для времени начала.

function HOOK_preprocess_node(&$variables) {
  $node = $variables['elements']['#node'];
  $timezone = drupal_get_user_timezone();
  $formatter = \Drupal::service('date.formatter');
  $field_date_start = $node->get('field_date_start')->getValue()->getTimestamp();
  $time = $formatter->format($field_date_start, 'custom', 'g:ia', $timezone);
  $variables['start_time'] = $time;
}

И затем напечататьзначение в шаблоне как

{{ start_time }}
...