我正在尝试在 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 对象?
最佳答案
JavaScript 的 Date
类型的关键在于,它为您提供了同一信息的两种不同 View :一种是本地时间,另一种是 UTC(大致上是 GMT)。
您的代码中发生的事情是 new Date
将其参数解释为本地时间(在您的时区),但随后控制台以 UTC 显示它(Z
后缀告诉我们)。您的时区显然是 GMT+05:30,这就是为什么 UTC 版本比您指定给 new Date
的日期/时间早五个半小时。
如果您将该日期输出为本地时区中的字符串(例如,从 toString
或使用 getHours
等),您将获得全零小时、分钟、秒和毫秒。这是相同的信息(日期是同一时间点),只是它的两种不同 View 。
因此,关键是要确保在输入和输出时只使用一种日期 View 。所以你可以:
像您一样创建它并使用本地时区函数(
toString
、getHours
等)或通过
Date.UTC
创建它,因此它以 UTC 解释您的参数,然后在显示它时使用 UTC/GMT 方法,例如toISOString
,getUTCHours
等:var dateOnlyInUTC = new Date(Date.UTC(2016, 7, 23)); console.log(dateOnlyInUTC.toISOString()); // "2016-08-23T00:00:00.000Z"
旁注:new Date
和Date.UTC
的小时、分钟、秒和毫秒参数默认为 0,您无需指定它们如果你想要那里的零。
关于javascript - 在 NodeJS 中创建一个时间为零的 Date 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39107133/