在ES中创建日期对象



我在使用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

最新更新