【问题标题】:Create a Date object with zero time in NodeJS在 NodeJS 中创建一个零时间的 Date 对象
【发布时间】:2016-12-30 15:13:06
【问题描述】:

我正在尝试在 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 node.js date


    【解决方案1】:

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

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

    如果您将该日期作为本地时区的字符串输出(例如,从toString 或使用getHours 等),您将得到小时、分钟、秒和毫秒的全零。这是相同的信息(日期是相同的时间点),只是对它的两种不同的看法。

    因此,关键是确保您在输入和输出上都只使用一种日期视图。所以你可以:

    1. 像你一样创建它并使用本地时区函数(toStringgetHours 等)输出它,或者

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

      var dateOnlyInUTC = new Date(Date.UTC(2016, 7, 23));
      console.log(dateOnlyInUTC.toISOString()); // "2016-08-23T00:00:00.000Z"
      

    旁注:new DateDate.UTC 的小时、分钟、秒和毫秒参数默认为 0,如果你想在此处设置零,则无需指定它们。

    【讨论】:

    • 哇,谢谢!我是 JS 和 Node 的新手,这真的让我很烦恼,特别是因为我在 StackOverflow 的其他任何地方都找不到它。
    【解决方案2】:

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

    另请参阅: What is the best way to initialize a JavaScript Date to midnight?

    【讨论】:

    • OP显示的代码相当于调用setHours(0)(和setMinutes(0)等等)。
    • 公平,但如果它不起作用,这是另一种方法。
    • 重点是做上面的结果是完全一样的。
    猜你喜欢
    • 2014-07-28
    • 1970-01-01
    • 2014-01-18
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多