Intl.DateTimeFormat返回超过24小时的一个小时



我有以下Unix时间戳:1611328500000(Fri Jan 22 2021 10:15:00 GMT-0500 (Eastern Standard Time)(。

我需要在韩国标准时间显示它。为此,我使用Intl.DateTimeFormat。然而,由于某种原因,当我尝试格式化它时,我得到的结果是24:15。除非我有妄想症,否则我敢肯定这比24小时时钟通常的频率(0:00到23:59(要高。

谷歌告诉我,我的结果应该是0:15,显然是在下一天(1月22日星期六(。

下面是一个最小的工作示例:

const date = new Date(1611328500000);
const timeOptions = {
hour12: false,
hour: '2-digit',
minute: '2-digit'
};
const formatter = new Intl.DateTimeFormat('en-US', {
timeZone: 'Asia/Seoul', ...timeOptions
});
console.log(formatter.format(date));

我疯了吗?在某些情况下,时间能达到24:15吗?这里发生了什么?


编辑:我刚刚发现这个页面似乎遇到了类似的问题。那里提供的答案将我指向一个名为hourCycle的东西,并链接到MDN的Intl.DateTimeFormat

但是,hourCycle只在该页面的浏览器支持部分显示一次。将建议的hourCycle: h11添加到我的timeOptions中不起作用。

进一步挖掘,我发现了这个页面,其中列出了h23作为一个有效的选项。当然这就是我想要的!但是,唉。。。我的成绩仍然是24:15。

hour12: true切换到hourCycle: 'h23'以显示从00:0023:59的小时数。

const date = new Date(1611328500000);
const timeOptions = {
hourCycle: 'h23',
hour: '2-digit',
minute: '2-digit'
};
const formatter = new Intl.DateTimeFormat('en-US', {
timeZone: 'Asia/Seoul', ...timeOptions
});
console.log(formatter.format(date));

我使用了下面的代码,它将输入3000000毫秒转换为输出00:50:00.000Z

const dateInMilliseconds = 3000000
const formatterConfig = { 
hour: "numeric",
minute: "numeric",
second: "numeric",
hourCycle: "h23",
timeZone: "UTC",
fractionalSecondDigits: 3
}
const dateInFormat = new Intl.DateTimeFormat([], formatterConfig).format(dateInMilliseconds)+'Z';
// 00:50:00.000Z

最新更新