我有以下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:00
到23: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