Отображение строки даты ISO 8601 в качестве локальной даты и времени на основе navigator.language - PullRequest
0 голосов
/ 29 ноября 2018

Я пытался отобразить локальную дату и время после разбора строки 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

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

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

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

Я что-то упустил здесь?

1 Ответ

0 голосов
/ 29 ноября 2018

Похоже, вы пытаетесь взять строку даты в формате 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);
let date = new Date(Date.UTC(y, m - 1, d, hh, mm, ss, ms));
let formatted = date.toLocaleString();

console.log(formatted);
...