我在使用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
)。
日期构造函数在您的本地时区中创建一个日期。要在UTC中创建一个日期执行此操作(请注意,月份参数也是基于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')
差异是由于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))
var someDate = new Date(2019, 2, 21)
中的 2
是月份索引。
参数月份索引是基于0的。这意味着1月= 0和12月= 11。
https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/date