You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript Date()返回小时数超过24的异常如何修复

问题原因

这个问题是两个因素共同导致的:

  • 你传入的日期字符串2022-07-08T00:40:00是不带时区标识的ISO 8601格式,按照JS规范,这类字符串会默认按UTC时区解析,而非你当前的本地时区,换算到本地时区时本身就会产生时差偏移。
  • en-US区域默认是12小时制,当你手动设置hour12: false强制切24小时制时,部分JS运行环境存在实现bug,会把午夜0点错误格式化为24点,不符合0-23的标准小时取值范围。
修复方法

你可以根据自己的需求选下面任意一种方案:

方案1:从根源避免日期解析的时区歧义

不要直接传ISO字符串给Date构造函数,改用数字传参的方式创建日期,这种方式默认按本地时区解析,不会被默认当成UTC时间:

// 注意Date的月份参数从0开始计数,7月对应传6
const dateTimezone = new Date(2022, 6, 8, 0, 40, 0).toLocaleString('en-US', {
    hour12: false
})
console.log(dateTimezone)

方案2:补全格式化配置,修复24点显示bug

如果不想改日期创建逻辑,就在toLocaleString的配置里显式指定hour为2-digit,强制格式化逻辑使用0-23的小时范围,不会出现24点的异常值:

const dateTimezone = new Date("2022-07-08T00:40:00").toLocaleString('en-US', {
    hour12: false,
    hour: '2-digit'
})
console.log(dateTimezone)

方案3:换用默认支持24小时制的区域配置

如果没有强需求必须用en-US的格式,可以换成默认24小时制的区域标识,比如en-GB、zh-CN,从根源上避免12小时制转24小时制的格式化bug:

// 用中文区域格式化,输出为 2022/7/8 00:40:00 格式
const dateTimezone = new Date("2022-07-08T00:40:00").toLocaleString('zh-CN', {
    hour12: false
})
console.log(dateTimezone)

内容的提问来源于stack exchange,提问作者Mehdi Bahlaoui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 21:24:29