【问题标题】:Date displayed in NodeJS is not the same as the date in MySQL, how to fix?NodeJS 中显示的日期与 MySQL 中显示的日期不一样,如何解决?
【发布时间】:2017-11-26 20:42:01
【问题描述】:

我的问题相当简单,但我似乎无法找到解决问题的简单方法。

我有一个分为三层的应用程序,Angular 2 用于前端,NodeJS 用于后端,然后 MySQL 用于持久性。

我的问题涉及数据库和后端。

我的数据库中有这个表,其中日期以日期格式保存(我知道它不应该被称为时间戳,但这不是重点),并且使用 PHPMyAdmin 我可以可视化以下行:

然后我的NodeJS脚本与数据库通信,得到如下结果:

如您所见,日期受到某种时区的影响。我想知道的是什么是最好的解决方案,以便在双方都有相同的结果(正确的值是你在数据库中看到的那个)。

【问题讨论】:

  • 在我的数据库中选择 CURDATE() 和 CURTIME() 时,时间显示正确,因此问题来自后端部分
  • JavaScript 日期可以表示为 UTC 或计算机的本地时间,具体取决于用于执行此操作的 Date 方法。 MySQL 时间可以存储在 UTC 或 MySQL 的时区中(取决于列类型),并且始终显示在 MySQL 的时区中。
  • 你需要展示你的代码,而不仅仅是问题。投票结束。请阅读帮助中心的How to create a Minimal, Complete, and Verifiable exampleHow do I ask a good question?。谢谢。

标签: mysql node.js angular date timezone


【解决方案1】:

在数据库中保存日期时最好使用时间戳。 希望它有效。

【讨论】:

  • 我宁愿不改变db的结构和背后的整体逻辑,但谢谢你的提议
【解决方案2】:

好的,我终于找到了解决方案。我真的不明白它为什么会起作用,但确实如此。创建连接池时,添加 dateStrings: 'date' 似乎可以解决问题。

这是一个例子:

var pool      =    mysql.createPool({
    connectionLimit : 100, //important
    host     : 'localhost',
    user     : 'root',
    password : 'root',
    database : 'ohmyhairdb',
    debug    :  false,
    dateStrings: 'date'
});

【讨论】:

  • 请注意,您应该以与时区无关的格式(即 UTC 时间)将时间戳存储在 MySQL 中。
  • 我同意你的观点,但在这种情况下,这是一个只能由一个特定人使用的应用程序。如果我必须针对更广泛的受众调整应用程序,我会考虑将其设为真正的时间戳
猜你喜欢
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 2021-06-11
  • 2018-12-25
  • 1970-01-01
  • 2019-06-01
  • 2019-04-22
相关资源
最近更新 更多