我试图在零时间内在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对象?
答案 0 :(得分:6)
JavaScript的Date
类型的关键在于它为您提供了两个不同的相同信息视图:一个在本地时间,另一个在UTC(松散,GMT)。
代码中发生的事情是new Date
将其参数解释为本地时间(在您的时区中),然后控制台以UTC显示它(Z
后缀告诉我们)。您的时区显然是GMT + 05:30,这就是为什么UTC版本比您指定给new Date
的日期/时间提前五个半小时。
如果您将该日期作为字符串输出到当地时区(例如,来自toString
,或使用getHours
等),则您可以获得全部为零,分钟,分钟,秒和毫秒。它是相同的信息(日期是相同的时间点),只有两个不同的视图。
所以关键是要确保你只需要输入和输出的日期视图。所以你可以:
像您一样创建并使用本地时区函数(toString
,getHours
等)或
通过Date.UTC
创建它,因此它以UTC格式解释您的参数,然后在显示时使用UTC / GMT方法,例如toISOString
,getUTCHours
等:< / p>
var dateOnlyInUTC = new Date(Date.UTC(2016, 7, 23));
console.log(dateOnlyInUTC.toISOString()); // "2016-08-23T00:00:00.000Z"
旁注:new Date
和Date.UTC
的小时,分钟,秒和毫秒参数默认为0,如果你想在那里加零,则不需要指定它们。
答案 1 :(得分:-3)
您可以随时使用所需日期初始化Date对象,然后使用Date对象.setHours()
方法将其设置为午夜。
另见: What is the best way to initialize a JavaScript Date to midnight?