javascript - 在 NodeJS 中创建一个时间为零的 Date 对象

标签 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 对象?

最佳答案

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

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

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

因此,关键是要确保在输入和输出时只使用一种日期 View 。所以你可以:

  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,您无需指定它们如果你想要那里的零。

关于javascript - 在 NodeJS 中创建一个时间为零的 Date 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39107133/

相关文章:

javascript - 节点内的可点击按钮

node.js - 无法全局安装最新版本的 Yeoman 和 Office 加载项的 Yeoman 生成器

javascript - Node : relocation error: node: symbol SSL_set_cert_cb, 版本 libssl.so.10 未在带有链接时间引用的文件 libssl.so.10 中定义

sql-server - 更改 XML 文件的 ssis 包中的日期

c - 如何从“月”,“周”,星期几获取日期

mysql - 我的 mysql 查询是否正确? (好像不是)

Javascript:object.name 和对象 ["name"之间的区别]?

javascript - 如何在幻灯片部分的页面中隐藏底部零

javascript - Amcharts 无法正确解析 mysql 中的日期时间

node.js - 从 ECS 集群中的 docker nodejs EC2 容器连接到 Redis Elasticache 集群