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