代码
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 选项有什么区别
您必须使用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)