Intl.DateTimeFormat 返回超过 24 小时

mat*_*own 5 javascript date

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

我需要以韩国标准时间显示它。为此,我正在使用Intl.DateTimeFormat. 但是,由于某种原因,当我尝试对其进行格式化时,我得到的结果是24:15。除非我有妄想症,否则我很确定这高于通常的 24 小时制(0:00 到 23:59)。

Google 告诉我我的结果应该是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));
Run Code Online (Sandbox Code Playgroud)

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


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

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

进一步挖掘,我发现了这个页面,它被h23列为一个有效的选项。这当然是我所追求的!但是,唉……我的结果仍然是 24:15。

Emi*_*ier 5

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

  • 啊哈!太感谢了!我找到了一些关于“hourCycle”的数据,但没有意识到它与“hour12”是互斥的。这是关键。 (2认同)
  • 另请注意,语言代码(也称为“区域设置”)可以覆盖 *hourCycle* 和 *hour12* 选项,具体取决于其他选项值。 (2认同)