我正在做一些 javascript 日期的事情,并且执行了以下操作:
console.log(new Date(0));
我本来希望看到 *nix Epoch,但奇怪的是我被返回了:
Wed Dec 31 1969 19:00:00 GMT-0500 (Eastern Standard Time)
发生了什么?
最佳答案
您正在设置内部时间值(UTC),但看到一个基于您的系统设置的字符串,该字符串的偏移量可能为 UTC-05:00。
ECMAScript 规范解释了 Date 构造函数和实例的工作原理。鉴于:
new Date(0)
使用一个参数 ( §20.3.2.2 Date(value) ) 调用 Date 构造函数,因此它会创建一个 Date 实例,并根据参数类型设置其内部时间值。由于该值为数字,因此时间值设置为该数字。
时间值是自 1970-01-01T00:00:00Z §20.3.1.1 Time Values and Time Range 的偏移量(以毫秒为单位) 。请注意,它基于 UTC。
console.log 的行为完全依赖于实现,因此您可以从中得到:
console.log(dateInstance);
取决于主机。然而,大多数似乎调用对象的 toString 方法,该方法根据主机系统的时区设置返回依赖于实现的字符串( §20.3.4.41 Date.prototype.toString() )。即“本地”时间。
时区偏移量可以使用 getTimezoneOffset 确定。它以分钟为单位,与 ISO 8601 偏移量的含义相反(例如 UTC-05:00 将是 +300)。如果要获取表示不带偏移量的内部时间值的日期字符串,请使用 toUTCString .
关于JavaScript 纪元日期不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33180844/