我面临着一种奇怪的情况,其中对传递时间戳的 Date
构造函数的后续调用将返回具有不同时区的日期对象。
当我使用该对象获取该月的某一天时,这会导致问题。
new Date(1509228000000).getDate()
29
new Date(1509314400000).getDate()
29
如果使用相同的时区,结果将是 29 和 30。
我的理解是javascript应该使用系统或浏览器时区。我不明白两个调用(一个接一个)如何返回具有不同时区的对象。
我使用的是 Chrome 版本 61.0.3163.100(官方版本)(64 位)。
澄清
我知道时间戳(毫秒数)可以用不同的时区表示。我不明白的是,使用不同的值调用 Date 构造函数如何导致同一计算机和浏览器中具有不同时区的 Date 对象。
最佳答案
在欧盟国家,中欧夏令时间 (CEST) 今年将于本地时间 2017 年 10 月 29 日凌晨 3:00 转换为中欧时间 (CET)。您的结果只是反射(reflect)了这种变化。该行为是预期的。 Reference here .
需要明确的是,您显示的两个值都是本地时间 10 月 29 日。 getDate()
调用的正确结果确实是 29。
为了进一步理解,我建议您阅读:
关于javascript - 后续调用新的 Date 返回具有不同时区的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46648509/