Date.toLocaleString('en-US', {hour12: false}) 提供午夜为 24

SS_*_*_20 6 javascript date

代码

const d = new Date('2021-08-04T18:33:43.0000000Z')
  .toLocaleString('en-US', {hour12: false, timeZone: "Asia/Kolkata"}) 
console.log(d)
Run Code Online (Sandbox Code Playgroud)

提供的结果为"8/5/2021, 24:03:43".
这里“24”小时应显示为“00”小时。这是toLocaleString功能问题吗?

我需要使用上述语法,因为日期格式应为浏览器语言日期格式,时间应为 24 小时格式。

对于其他语言,它可以正常工作,例如 GB

const d = new Date('2021-08-04T18:33:43.0000000Z')
  .toLocaleString('en-GB', {hour12: false, timeZone: "Asia/Kolkata"}) 
console.log(d)
Run Code Online (Sandbox Code Playgroud)

将提供结果为"05/08/2021, 00:03:43".

那么有人可以帮助我如何使用toLocaleString函数获取正确的 24 小时格式时间吗?

mpl*_*jan 13

似乎是 INTL ECMA 规范中的一个错误,应该在 ECMA2021 中修复。

这可能只是 Chromium 的问题

同时,您可以添加hourCycle: 'h23'参数以强制使用 00,因为在指定h24时它是某些语言环境的默认值hour12: false

https://github.com/moment/luxon/issues/726

这个问题的根本原因来自于Chromium 的这一变化。它引入了对 Intl.DateTimeFormat 中的 hourCycle 选项的支持。
支持的四个值是“h11”、“h12”、“h23”或“h24”( MDN ),h23 和 h24 之间的区别正是午夜是否应显示为 00 (h23) 或 24 (h24)

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

  • 是的,这似乎仅在 Chrome/en-US 中存在,在 Safari、Firefox、Opera 中不是问题。我不喜欢允许 *toLocaleString* 做任何事情,我更喜欢 *formatToParts* 并自己进行实际格式化(或使用库......)。:-) (2认同)

Sty*_*tyx 5

您必须使用hourCycle: 'h23'选项来强制使用0-23小时格式。

> new Date('2021-08-04T18:33:43.0Z').toLocaleString('en-US', { hourCycle: 'h23'})
"8/5/2021, 00:33:43"
Run Code Online (Sandbox Code Playgroud)