【发布时间】:2021-12-30 19:59:11
【问题描述】:
我搜索了很多,但找不到对此的解释,在我看来,getTime() 的行为令人困惑。文档指出:
getTime() 始终使用 UTC 表示时间。例如,一个 一个时区的客户端浏览器,getTime() 将与客户端相同 任何其他时区的浏览器。
根据这个说法,我的理解是,例如
1. new Date (Date.UTC(2021,8,1)).getTime() // UTC Date 1.Sep.2021 00:00:00
2. new Date (2021,8,1).getTime() // Local (UTC+1) Date 1.Sep.2021 00:00:00
应该提供相同的毫秒数。但我得到的结果是:
1. 1630454400000
2. 1630447200000 // 1 hour (3600000 ms) missing
问题 A:自 1970 年 1 月 1 日以来,物理上已经过去了相同的时间。根据文档,为什么结果不相等(夏令时也很重要!)?
问题 B:如果行为正确,为什么少了一小时?不应该还有一小时吗?从逻辑上讲,UTC+1 提前一小时。
【问题讨论】:
-
new Date (Date.UTC(2021,8,1))-> UTC,new Date (2021,8,1)-> 本地 - 所有在documentation over at MDN中提到 -
这是合乎逻辑的,因为您的第二个日期是 utc+1,所以到 1970 年的 utc 秒数是 1 小时减去日期
-
.getTime()的返回值将始终为“UTC”(以秒为单位的差异...)。但是传递给Date构造函数的日期会受到不同的处理,因为一个是 UTC,一个是你的 lcoal 时间。 -
我猜这种混淆主要是由于文档中的句子有点多余。它没有比声明
10 - 7在每个浏览器中评估为3更深入。.getTime()本质上提供了减法的结果,它给出了日期 A 和日期 B 之间经过的毫秒数。日期 A 是 1970 年 1 月 1 日 UTC 的午夜。因此,假设日期 B 跨时区相同,则跨时区差异也相同,因此 getTime() 的结果跨时区相同。 -
new Date (2021,8,1)但是会根据脚本运行的时区产生不同的时间点(因为它使用本地时间),因此与固定 UTC 时间点的差异也会因浏览器而异。在 GMT+0 和 GMT+1 中运行new Date (2021,8,1)会给出两个相隔一小时的日期,因此 getTime() 将给出相隔 3600000 毫秒的两个数字。然而,这与文档中的句子并不矛盾,因为两个时区的输入日期不同。
标签: javascript date utc epoch gettime