在ES中创建日期对象

时间:2019-02-21 15:11:08

标签: javascript ecmascript-6

使用ES创建Date对象时,我有一个非常不寻常的行为:

var someDate = new Date(2019, 2, 21)

给我Date 2019-02-20T23:00:00.000Z,那是我传递给构造函数的日期的前一天。

但是,如果我在不提供任何参数的情况下创建新的Date,则会得到正确的值:

let now = new Date()

然后now的值为2019-02-21T15:07:21.606Z(今天是Feb. 21, 2019)。

3 个答案:

答案 0 :(得分:4)

Date构造函数在您当地的时区中创建一个日期。要在UTC中创建日期,请执行以下操作(请注意,month参数也是基于0的索引):

var someDate = new Date(Date.UTC(2019,1, 21))

或使用ISO 8601日期字符串,该字符串不带时间成分,也可以不带时间成分,后缀Z表示UTC

var someDate = new Date('2019-02-21')
var someDate = new Date('2019-02-21T00:00Z')

答案 1 :(得分:1)

之所以如此,是因为new Date(2019, 2, 21)在您当前的时区中创建日期。但是,当您执行console.log(date)时,通常会以UTC格式打印日期(不同的浏览器会有不同的行为)。

因此,当日期new Date(2019, 2, 21)new Date()都转换为UTC时,两者都减少了相同的数量,但是new Date()也获得了当前时间,因此日期没有变化。

console.log(new Date(2019, 2, 21));
console.log(new Date(2019, 2, 21).toString());
console.log(new Date(2019, 2, 21).toUTCString());
console.log(new Date());
console.log(new Date().toString());
console.log(new Date().toUTCString());

要在UTC中创建日期,您应该在从字符串进行解析时在末尾添加Z

您也可以通过执行Date.UTC(year, month, date)获得日期的Unix时间。您可以通过执行new Date(Date.UTC(year, month, date))

从中创建日期

答案 2 :(得分:0)

您的2中的var someDate = new Date(2019, 2, 21)是monthIndex。

参数monthIndex基于0。这意味着一月= 0,十二月= 11。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date