如何获取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
相关产品推荐
相关产品推荐

