Node中Sequelize从mysql中查出的时间不对

我的node服务使用Sequelize来接已经创建好的mysql;
mysql的时间类型为timestamp,而在Sequelize中定义的模型是这样的:

  module.exports = function (sequelize, DataTypes) {
        var User = sequelize.define("user", {
            id: {
                type: DataTypes.BIGINT,
                primaryKey: true
            },
            create_time: DataTypes.DATE,
            update_time: DataTypes.DATE
        },{
            freezeTableName: true,
            timestamps: false
        });
        return User;
    };



当我往数据库插入一条记录时
var data = {
    id: 1234,
    create_time: new Date(),
    update_time: new Date()
};
User.create(data).then(function (result) {
    console.log('添加成功!');
}).catch(function (err) {
    console.log('添加失败!');
});

数据是这样显示的

clipboard.png

但是我查出来的记录却是这样的

{
"id": 1234,
"create_time": "2017-08-04T01:46:36.000Z",
"update_time": "2017-08-04T01:46:36.000Z"
}
数据库的时间是Linux时间,但是好像没用那个时间
我用sql语句查出来时间是对的,所以我觉得是Sequelize的问题.
我尝试用moment.UTC().format()来转化他,好像不好使.
但我觉得这样是不可取的,假设我要查1万条数据我不可能转化1万次吧!
我感觉是Sequelize中定义模型的问题,能有人帮帮我吗
阅读 10k
1 个回答

差了14个时区,感觉确实不对,改改试试:

const Sequelize = require('sequelize');

const sequelize = new Sequelize('dbname', 'username', 'password', {
    host: 'localhost', 
    dialect: 'mysql',
    pool: {
        max: 50,
        min: 0,
        idle: 10000
    },
    timezone: '+08:00' //东八时区
});
module.exports = function (sequelize, DataTypes) {
        var User = sequelize.define("user", {
            id: {
                type: DataTypes.BIGINT,
                primaryKey: true
            },
            createdAt: {
                type: Sequelize.DATE,
                get() {
                    return moment(this.getDataValue('createdAt')).format('YYYY-MM-DD HH:mm:ss');
                }
            },
            updatedAt: {
                type: Sequelize.DATE,
                get() {
                    return moment(this.getDataValue('updatedAt')).format('YYYY-MM-DD HH:mm:ss');
                }
            }
        },{
            freezeTableName: true,
            timestamps: false
        });
        return User;
    };
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏