【问题标题】:Nodejs mysql timezone issueNodejs mysql时区问题
【发布时间】:2019-07-22 09:17:00
【问题描述】:

我正在使用节点 mysql 库。

在我的一个插入查询中,我使用now() 插入当前时间。但是,我看到的时间与我所在时区的时间不同。我正在使用 heroku 中的 cleardb 作为我的 mysql 数据库。我没有找到任何设置来更改时区。使用now() 是一种不好的做法吗?是否有一种 javascript 替代方法可用于获取类似于 now() 的当前日期和时间?

【问题讨论】:

  • "我没有找到任何设置来更改时区。使用now() 是一种不好的做法吗?"使用 UTC 以外的任何方式将数据存储在数据库中是一种不好的做法。不要改变你的数据库;更改您的代码,使其使用您想要的任何时区显示时间。

标签: mysql node.js heroku


【解决方案1】:

你可以使用 new Date();在 Javascript 或类似的东西中,以 UTC 格式获取当前日期/时间并将该 UTC 格式 dateTime 存储到数据库中。

查询日期后(如:select Date from table1;)返回给前端后,可以使用.toLocaleString();将其转换为“正常”日期时间字符串。你甚至可以进一步使用 .toLocaleString 选项以你想要的格式显示日期时间,查看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString

【讨论】:

  • new Date() 也给了我不正确的时区,但这有效(new Date ((new Date((new Date(new Date())).toISOString() )).getTime() - ((new Date()).getTimezoneOffset()*60000))).toISOString().slice(0, 19).replace('T', ' ');