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

如何获取UTC+0时区下的1900/01/01?为何转换结果异常?

问题原因解析

核心区别:时区处理逻辑

  • new Date(1900, 0, 1):直接基于本地时区生成1900年1月1日的日期对象,toString()输出的是该本地时间对应的字符串。
  • Date.UTC(1900, 0, 1):返回UTC标准时间1900年1月1日00:00:00对应的毫秒数,把这个值传给new Date()时,会将UTC时间转换为本地时区的时间再显示。

奇怪偏移的根源:历史时区规则

你看到的GMT-0014(比UTC慢14分钟左右),是因为1900年前后的欧洲中部时区(比如德国)还没有采用统一的整小时UTC偏移。当时该地区的本地时间和UTC的差值约为14分44秒,所以:

UTC时间1900年1月1日00:00:00,转换为欧洲中部本地时间就是1899年12月31日23:45:16(00:00:00减去14分44秒,和你得到的结果一致)。

测试代码验证

你的测试代码逻辑可以拆解为:

// 直接创建本地时区的1900年1月1日日期
const date = new Date(1900, 0, 1);
console.log(date.toString()) 

console.log("==========================");

// 先拿到UTC时间1900-01-01 00:00:00的毫秒数,再转成本地历史时区时间
const date2 = new Date(Date.UTC(1900, 0, 1));
console.log(date2.toString()) 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:36:10