Недавно я создал страницу Прямые трансляции, чтобы продвигать мои предстоящие живые потоки кодирования и способы найти мои предыдущие. У меня указано время. Однако времена тяжелые. Сначала я отправил их без указания часового пояса CDT — извините, ребята. Но все же, это боль и недружественно для любого в другом часовом поясе.

Черт возьми, мне даже трудно перевести 24-часовой формат времени из EDT в CDT, не говоря уже о UTC. Поэтому я написал немного ванильного JavaScript, чтобы преобразовать время в языковой стандарт текущего пользователя — никаких зависимостей!

Drupal выводит свои поля даты и времени в элементе time с атрибутом datetime, который содержит строку даты и времени. Вот пример:

<time datetime="2021-04-27T19:00:00Z">Tue, 04/27/2021 - 2:00PM CDT</time>

Мы можем использовать свойство datetime, чтобы изменить содержимое элемента, чтобы оно было отформатировано в соответствии с локалью текущего пользователя. Все, что нам нужно сделать, это использовать объект Date. Мы можем взять значение из атрибута datetime и передать его конструктору объекта Date для создания нового объекта.

(function () {
  document.querySelectorAll('time').forEach((el) => {
    const date = new Date(el.dateTime);
  })
})();

Довольно легко, да? Тогда нам просто нужно использовать методы локали:

Я хотел контролировать формат, поэтому использовал литерал шаблона для создания собственного формата:

(function () {
  document.querySelectorAll('time').forEach((el) => {
    const date = new Date(el.dateTime);
    el.innerText = `${date.toLocaleString(navigator.language, {
      weekday: 'short'
    })}, ${date.toLocaleDateString(navigator.language)} - ${date.toLocaleTimeString(navigator.language, {
      hour: 'numeric',
      minute:'2-digit',
      timeZoneName: 'short'
    })}`;
  })
})();

Для себя я получаю такой элемент времени:

<time datetime="2021-04-27T19:00:00Z">Tue, 4/27/2021 - 2:00 PM CDT</time>

Это делает для приятного улучшения. Это то, что я хотел бы, чтобы больше сайтов конференций и мероприятий делали.

К сожалению, я понятия не имею, как проверить это в Chromium (Brave, Chrome) Dev Tools для разных локалей или часовых поясов. Вы можете многое сделать, но я не вижу способа смоделировать другую локаль или часовой пояс. Если вы знаете способ, дайте мне знать!