在NodeJS中创建零时间的Date对象

时间:2016-08-23 17:11:59

标签: javascript node.js date

我试图在零时间内在NodeJS中创建一个日期,例如2016-08-23T00:00:00.000Z。我尝试了以下代码:

var dateOnly = new Date(2016, 7, 23, 0, 0, 0, 0);
console.log(dateOnly);

虽然我预计输出如上所述,但我得到了这个:

2016-08-22T18:30:00.000Z

如何创建我想要的Date对象?

2 个答案:

答案 0 :(得分:6)

JavaScript的Date类型的关键在于它为您提供了两个不同的相同信息视图:一个在本地时间,另一个在UTC(松散,GMT)。

代码中发生的事情是new Date将其参数解释为本地时间(在您的时区中),然后控制台以UTC显示它(Z后缀告诉我们)。您的时区显然是GMT + 05:30,这就是为什么UTC版本比您指定给new Date的日期/时间提前五个半小时。

如果您将该日期作为字符串输出到当地时区(例如,来自toString,或使用getHours等),则您可以获得全部为零,分钟,分钟,秒和毫秒。它是相同的信息(日期是相同的时间点),只有两个不同的视图。

所以关键是要确保你只需要输入和输出的日期视图。所以你可以:

  1. 像您一样创建并使用本地时区函数(toStringgetHours等)或

  2. 输出它
  3. 通过Date.UTC创建它,因此它以UTC格式解释您的参数,然后在显示时使用UTC / GMT方法,例如toISOStringgetUTCHours等:< / p>

    var dateOnlyInUTC = new Date(Date.UTC(2016, 7, 23));
    console.log(dateOnlyInUTC.toISOString()); // "2016-08-23T00:00:00.000Z"
    
  4. 旁注:new DateDate.UTC的小时,分​​钟,秒和毫秒参数默认为0,如果你想在那里加零,则不需要指定它们。

答案 1 :(得分:-3)

您可以随时使用所需日期初始化Date对象,然后使用Date对象.setHours()方法将其设置为午夜。

另见: What is the best way to initialize a JavaScript Date to midnight?