考试 :
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)