如何解释Date构造函数的区别?

Cyr*_*don 18 javascript date

考试 :

var d1 = new Date("2000-04-22T00:00:00+00:00");
var d2 = new Date(2000, 4, 22, 0, 0, 0, 0);
console.log("d1 = " + d1.getTime());
console.log("d2 = " + d2.getTime());
Run Code Online (Sandbox Code Playgroud)

结果 :

d1 = 956361600000
d2 = 958946400000
Run Code Online (Sandbox Code Playgroud)

我认为差异来自时区,但我根本不明白!

什么神奇的东西产生这种差异?

Poi*_*nty 19

您的ISO日期字符串具有明确的UTC时区,因此它被解释为UTC.第二个日期由日期部分的数字参数构成,构建Date的方法隐式使用本地时区.

另请注意,日期字符串中的"4"表示"四月",而第二个构造函数中的"4"表示"可能":使用数字构造函数时,月份从零开始编号,而不是一个.


小智 12

最大的问题是在Javascript中索引的月数为0,在创建第二个日期实例时,4表示5月.此外,您的字符串包含+00:00用于时区目的,即UTC/GMT.您的第二个没有提供时区信息,因此它将是当地时区.

如果你想要一个类似于你的方式构建的UTC日期,你可以打电话:

var d2 = new Date(Date.UTC(2000, 3, 22, 0, 0, 0, 0)); 
Run Code Online (Sandbox Code Playgroud)