Каковы различия между параметрами hourCycle в Date.prototype.toLocaleTimeString () - PullRequest
0 голосов
/ 18 января 2019

Документация MDN для toLocaleTimeString () указывает, что опции hourCycle и hc имеют четыре возможных значения: "h11", "h12", "h23", & "h24".

Два из возможных значений кажутся мне очень очевидными (т. Е. "h12" и "h24"), но два других, я понятия не имею, что они делают, и мой duckduckfoo / googlefoo меня подводит!

Что представляют собой значения "h11" и "h23"?

Мое лучшее предположение состоит в том, что они являются производными 0 против 1 производных "h12" и "h24", но базовая отметка даты остается той же, а зарегистрированное значение - тем же, так что если вот в чем разница?

Это должно быть задокументировано или, по крайней мере, связано с ним на странице toNocalTimeString MDN или странице toLocalTimeString ECMAScript , но это не так. Это также действительно кажется мне чем-то, что должно быть легко понять, и все же я не вижу разницы, и теперь она ползет под моей кожей!

const now = new Date();
console.log('hourCycle: h11', now.toLocaleTimeString('en-US', { hourCycle: 'h11' }))
console.log('hourCycle: h12', now.toLocaleTimeString('en-US', { hourCycle: 'h12' }))
console.log('hourCycle: h23', now.toLocaleTimeString('en-US', { hourCycle: 'h23' }))
console.log('hourCycle: h24', now.toLocaleTimeString('en-US', { hourCycle: 'h24' }))

1 Ответ

0 голосов
/ 24 апреля 2019

Я обнаружил, что предложение dateStyle и timeStyle для Intl.DateTimeFormat говорит:

[[HourCycle]] - это строковое значение, указывающее, следует ли использовать 12-часовой формат ("h11", "h12") или 24-часовой формат ("h23", "h24"). "h11" и "h23" начинаются с часа 0 и доходят до 11 и 23 соответственно. "h12" и "h24" начинаются с часа 1 и доходят до 12 и 24. [[HourCycle]] используется, только когда [[Hour]] не undefined .

Английский или американский стиль может предпочесть h12:

› new Date(2019,4,1,12,0,0).toLocaleString('en-US', { hourCycle: 'h12' })
‹ "5/1/2019, 12:00:00 PM"
› new Date(2019,4,1,12,0,0).toLocaleString('en-US', { hourCycle: 'h11' })
‹ "5/1/2019, 0:00:00 PM"

h24 следует использовать с осторожностью. Было бы неплохо, если бы часть даты была значением за день до этого.

› new Date(2019,4,1,0,59,59).toLocaleString('ja-JP', { hourCycle: 'h23' })
‹ "2019/5/1 0:59:59"
› new Date(2019,4,1,0,59,59).toLocaleString('ja-JP', { hourCycle: 'h24' })
‹ "2019/5/1 24:59:59"

Таблица совместимости в MDN говорит, что Firefox 58 и Edge поддерживают это.

...