Javascript Intl.DateTimeFormat hours12 дает нечетный вывод на Chrome - PullRequest
0 голосов
/ 06 августа 2020

Я наблюдаю поведение на Chrome, где возвращаемое значение для времени 12:00, отформатированного с помощью параметра hours12, установленного в true, получается как 0 pm. Разве не должно быть 12? Если нет, как правильно отображать 12-часовые часы? Обратите внимание, что я ограничен использованием ES5.

Следующее в Chrome печатает 0 pm:

var foo = new Date(2020, 0, 1, 12, 0, 0)
var bar = new Intl.DateTimeFormat("en-GB", {hour12: true, hour: "numeric"}).format(foo)
console.log(bar)

Обратите внимание, что значение bar равно «0 pm». Другие языки, кроме en-GB, демонстрируют такое поведение. Однако тот же код, запущенный с en-US, дает мне «12 PM». Неужели Бритни sh и другие на самом деле используют «0 вечера» для обозначения полудня? Это ошибка в Chrome? Этого не происходит в FF или IE.

Заранее благодарим за любой ввод.

1 Ответ

0 голосов
/ 06 августа 2020

Вероятно, это проблема с часовым циклом. Предполагается, что он основан на предоставленном коде языка и должен быть отменен путем установки параметра «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, но вы не можете ожидать, что он будет правильно или согласованно форматировать даты в различных реализациях только на основе кода языка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...