使用 NodeJS 无法在 mysql 中正确保存日期(比实际日期少一天)

Cha*_*lva 8 mysql sql date node.js express

我使用 Node.JS 和 ExpressJS 创建了休息服务器。数据库是MySQL。我从前端传递日期如下。

2016-7-26

当我进入数据库时​​,它是这样保存的。如下:

2016-07-26 00:00:00

因为mysql的日期格式是时间戳。当我从 REST 规则中获取结果时,我得到这样的日期。

“2016-07-25T18:30:00.000Z”

我存了 26。但是这里我得到了 25。这是什么原因?时区 ?请告诉我如何解决这个问题。

Don*_*Don 7

问题不在于保存数据或 SQL 本身;而在于保存数据。因为如果您直接在数据库上运行查询,它将显示保存时的正确值。

\n

您可以通过在 SQL 端按照一些答案建议添加日期来修复 \xc2\xa0each 查询中的此问题;但这不是正确的\xc2\xa0解决方案。\xc2\xa0

\n

另一种选择是通过添加值在 Node.js 中修复此问题;这也不是正确的方法。\xc2\xa0

\n

根据我的理解,正确的方法是在初始化 mysql 连接时设置时区。\xc2\xa0

\n
var connection = mysql.createConnection({\n    host: '192.99.99.99',\n    user: 'user',\n    password: 'password',\n    database: 'mydb',\n    timezone: 'utc' //<-- here\n  });\n
Run Code Online (Sandbox Code Playgroud)\n


小智 5

这是因为节点将日期转换为 ISOString 并且日期采用 GMT。<your date>.toLocaleString();从数据库查询数据后使用。

例子:

connection.query(yourDbQuery, function(err, result){ 
    if(result) {  
        var date = result.date.toLocaleString(); 
    }
});
Run Code Online (Sandbox Code Playgroud)

您还可以安装 npm moment,这对于日期非常有帮助。

安装、使用

npm install moment

并使用以下代码:

const moment = require('moment');
let date = moment(result.date).format('DD/MM/YYYY');
Run Code Online (Sandbox Code Playgroud)