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。这是什么原因?时区 ?请告诉我如何解决这个问题。
问题不在于保存数据或 SQL 本身;而在于保存数据。因为如果您直接在数据库上运行查询,它将显示保存时的正确值。
\n您可以通过在 SQL 端按照一些答案建议添加日期来修复 \xc2\xa0each 查询中的此问题;但这不是正确的\xc2\xa0解决方案。\xc2\xa0
\n另一种选择是通过添加值在 Node.js 中修复此问题;这也不是正确的方法。\xc2\xa0
\n根据我的理解,正确的方法是在初始化 mysql 连接时设置时区。\xc2\xa0
\nvar connection = mysql.createConnection({\n host: '192.99.99.99',\n user: 'user',\n password: 'password',\n database: 'mydb',\n timezone: 'utc' //<-- here\n });\nRun 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)