Вероятно, это проблема с часовым циклом. Предполагается, что он основан на предоставленном коде языка и должен быть отменен путем установки параметра «h c» на одно из «h11», «h12», «h23», «h24».
Однако, Chrome, похоже, все равно игнорирует часовой цикл:
var foo = new Date(2020, 0, 1, 12, 0, 0)
var bar = new Intl.DateTimeFormat("en-GB", {
hour12: true,
hour: "numeric",
hc: "h12" // Should force 12 am / 12 pm
}).format(foo);
console.log(bar); // 0 pm in Chrome, 12 pm in others
Согласно MDN , если установлены оба параметра hour12 и h c, то час12 имеет приоритет. Однако удаление опции hour12 и установка hc:"12"
возвращает только «12» без «pm», а полночь - «00».
Объект Intl не указывает, какой формат языков, которые используются в отдельных реализациях, чтобы определить, что использует конкретный язык или культура. Таким образом, вы можете использовать метод проб и ошибок, чтобы найти языковой код, который выполняет эту работу, например, в этом случае использование только «en», а не «en-GB» возвращает 12 часов вечера в Chrome.
Насколько Я вижу, объект Intl не подходит для форматирования дат. Это действительно хорошо только для удобного получения частей даты с помощью метода formatToParts , а затем форматирования вручную оттуда. Это также удобно для получения даты и времени в часовых поясах на основе местоположений IANA, но вы не можете ожидать, что он будет правильно или согласованно форматировать даты в различных реализациях только на основе кода языка.