Отображение строки даты ISO 8601 в качестве локальной даты и времени на основе navigator.language

1

Я пытался отобразить локальную дату и время после разбора строки ISO на локальную метку времени на основе navigator.language.

let sampleDate = new Date('2018-11-29T09:54:46.863207Z').toLocaleString(navigator.language);

Поэтому, когда я изменяю языковые предпочтения браузера, он отображает формат даты в правильной локали, но это не похоже на временную часть строки ISO.

Результат в локали браузера en-AU - Data Last Updated at 29/11/2018, 3:24:46 pm

Результат с Data Last Updated at 11/29/2018, 3:24:46 pm браузера en-US - Data Last Updated at 11/29/2018, 3:24:46 pm

Посмотрите, как меняется только формат даты в зависимости от локали. Похоже, что он не влияет на компонент времени строки ISO 8601.

Я пытался использовать moment.js для отображения даты и времени в формате локали браузера, но не добился большого успеха.

Я что-то здесь упускаю?

  • 0
    Какой формат вы ожидаете на время ...?
  • 1
    О, вы хотите, чтобы он был в часовом поясе Австралии / США ?! Ну, это не то, что делает toLocaleString . Локаль просто определяет язык / формат , а не часовой пояс .
Показать ещё 2 комментария
Теги:
datetime
locale
localization
iso8601

1 ответ

0

Похоже, вы пытаетесь взять строку даты в формате UTC, преобразовать ее в локальную дату и время браузера клиента и отформатировать дату в зависимости от локали. Возможно, вы немного обдумали это, поскольку JavaScript делает это за вас, если вы правильно создаете объект Date.

Не рекомендуется разбирать строки даты с помощью new Date(), поэтому в приведенном ниже примере кода используется небольшое регулярное выражение и распаковка для анализа строки даты, после чего вы можете создать дату в UTC с new Date(Date.UTC(...)). В этот момент JavaScript будет автоматически представлять объект даты в локальной дате и времени браузера клиента, а затем вы можете использовать toLocaleString() чтобы применить форматирование для локали браузера клиента. Например:

const s = '2018-11-29T09:54:46.863207Z';

let [y, m, d, hh, mm, ss, ms] = s.match(/\d+/g).map(x => parseInt(x));
let date = new Date(Date.UTC(y, m - 1, d, hh, mm, ss, ms));
let formatted = date.toLocaleString();

console.log(formatted);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню