Date.prototype.toLocaleTimeString() 中的hourCycle 选项有什么区别

Met*_*ean 7 javascript datetime specifications

toLocaleTimeString() 的 MDN 文档指出hourCyclehc选项有四个可能的值:"h11", "h12", "h23", & "h24"

两个可能的值让我觉得非常明显(即"h12""h24"),但另外两个,我不知道它们做什么,我的duckduckfoo/googlefoo 失败了!

什么是"h11""h23"代表值?

我最好的猜测是,他们是某种类型的0VS1的推导"h12""h24",但基础日期戳仍然相同,并且记录的值相同,所以如果是这样,区别在哪里?

这应该在MDN 的 toLocalTimeString 页面ECMAScript 的 toLocalTimeString 页面上记录或至少链接到,但事实并非如此。它也确实让我觉得应该很容易弄清楚,但我没有看到差异,它现在在我的皮肤下爬行!

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' }))
Run Code Online (Sandbox Code Playgroud)

cri*_*bug 6

我发现Intl.DateTimeFormatdateStyle 和 timeStyle 选项的建议说:

[[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"
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

MDN 中的兼容性表表示 Firefox 58 和 Edge 支持这一点。


jth*_*ter 5

我同意目前很难找到关于hourCycle值的MDN 文档,但我在这里找到了它们:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Locale/hourCycle

面向开发人员的 Web 技术 > JavaScript > JavaScript 参考 > 标准内置对象 > Intl.Locale > Intl.Locale.prototype.hourCycle

[…]

h12 : 使用 1-12 的小时制;对应于模式中的“h”。12 小时制,午夜从凌晨 12:00 开始。

h23 : 使用 0-23 的小时制;对应于模式中的“H”。24 小时制,午夜从 0:00 开始。

h11 : 使用 0-11 的小时制;对应于模式中的“K”。12 小时制,午夜从凌晨 0:00 开始。

h24 : 使用 1-24 的小时制;对应于模式中的“k”。24 小时制,午夜从 24:00 开始。

  • 我在“hourCycle”上搜索 MDN 文档时发现了您的上述问题,因为他们没有从“Date.prototype.toLocaleString()”和“toLocaleTimeString()”上的页面链接到它。请注意,我在这里添加我的答案是为了提供帮助,而不是为了批评。 (3认同)