使用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
)。
答案 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