当我直接从MySQL获取时,NodeJS响应MySQL时区是不同的

时间:2014-05-09 17:56:03

标签: mysql node.js timezone

当我直接请求MySQL时,我以UTC格式返回日期(我在MySQL服务器中设置了UTC),但是使用NodeJS我获得了UTC + 2本地时区数据,为什么?如何设置NodeJS以获得UTC?

enter image description here enter image description here

6 个答案:

答案 0 :(得分:46)

初始化mysql连接时,我在index.js中添加了时区

var db_config = {
  host     : 'localhost',
  user     : 'xxx',
  password : '',
  database : 'xxx',
  timezone: 'utc'  //<-here this line was missing
};

答案 1 :(得分:6)

虽然这是一个老问题,但我遇到了类似问题,添加配置timezone: 'utc'并没有解决问题(情况变得更糟)。

我最终使用的解决方案是添加配置dateStrings : true,以便我有一个原始字符串日期,并且mysql模块不会自行转换为javascript日期。

然后我使用moment.utc(thedatestring)来获取合适的javascript对象(在数据库中,我将所有日期保存为DATETIME列中的UTC,与主机的配置无关)。使用Moment.js

答案 2 :(得分:2)

尝试将时区值设置为&#34; UTC + 0&#34;,这对我有用。

答案 3 :(得分:1)

在一次又一次地遇到这个问题后,我找到了理想的解决方案。

我的$this->_items->setQuote($this);应用通过admin ORM从nodeJS db获取数据。

确保所有时区都相同。

mySQL

Sequelize

config.js

const timezone = 'UTC'
process.env.TZ = timezone

希望它可以节省某人的时间,不会陷入这个循环...... :)。

答案 4 :(得分:0)

旧问题,但是可以将TZ环境变量设置为'UTC + 0'来解决。有几种方法可以实现,其中一些是:

  • 在bash中:
    • $ TZ='UTC+0' node index.js
  • 在代码内部:
    • process.env.TZ = "UTC+0"
  • 在Visual Code中,更改launch.json配置文件。例如:
    {
        "type": "node",
        "request": "launch",
        "name": "Launch Program",
        "program": "${fileDirname}/${fileBasename}",
        "env": {"TZ": "UTC+0"}  // <-- ADD THIS
    }

答案 5 :(得分:0)

我知道这个问题已经回答了,而且很旧,但是如果您使用的是 mysql2 库并且在将时区设置为 UTC 时遇到问题,您可以使用“Z”时区来完成。 Z 代表祖鲁语,explanation from here

const mysql = require('mysql2')
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  database: 'test',
  password: 'mypass',
  timezone: 'Z',
})

设置此时区配置意味着每个日期(Javascript 日期对象)在发送到数据库时将转换为 utc,而在来自数据库时将转换为 FROM utc。 Here is the implementation, from mysql2 GitHub repository