Sequelize DATE记录与模型对象不同

时间:2015-12-31 01:07:45

标签: mysql date datetime express sequelize.js

我遇到的问题是,在我的数据库中记录的日期与我在视图中将记录用作对象时所表示的日期不匹配。我似乎无法弄清楚为什么记录会以不同的方式表示,但我注意到在我的数据库中,日期与仅记录yyyy-mm-dd格式的日期一致,时间戳为00:00:00,e.x。 2015-12-26 00:00:00。这是应该保存的正确格式。出于某种原因,当我显示此值时,它以Fri Dec 25 2015 19:00:00 GMT-0500 (EST)格式显示,日期为后面一天,因为它正在记录并显示在GMT中,落后5个小时才有意义,为什么两者不匹配。我没有看到在我的模型或路线中设置的位置。有什么帮助搞清楚了吗?

AnnotationDate是我引用的列

这是我的模特:

module.exports = function(sequelize, DataTypes) {

var Annotation = sequelize.define('annotation', {
    annotationId: {
        type: DataTypes.INTEGER,
        field: 'annotation_id',
        autoIncrement: true,
        primaryKey: true
    },
    annotationDate: {
        type: DataTypes.DATE,
        field: 'annotation_date'
    },
    userId: {
        type: DataTypes.STRING,
        field: 'user_id'
    }
},

 {
    freezeTableName: true,
    getterMethods: {
        annotationDateSlug: function(){
            var date = new Date(this.getDataValue('annotationDate')); 
            var month = date.getMonth();
            var day = date.getDate();
            var year = date.getFullYear();

            return month+'/'+day+'/'+year;

        },
    },
    classMethods: {
        associate: function(db) {
            Annotation.belongsTo(db.User)
        }
    }
});
    return Annotation;
}

以下是将值作为对象传递的方式:

appRoutes.route('/') 

    .get(function(req, res){

        models.Annotation.findAll({
            where: {
                userId: req.user.user_id
            },
            attributes: ['annotationId', 'annotationDate'],
            order: 'annotationDate DESC'
        }).then(function(annotation){
            res.render('pages/test.hbs',{
                annotation: annotation,
                user: req.user,
                message: req.flash('Flash is back!')
            });
        })
    })

    .post(function(req, res){

        models.Annotation.create({

        annotationDate: req.body.annotationDate,
        userId: req.user.user_id
        }).then(function() { 
            res.redirect('/app');
        }).catch(function(error){
            res.send(error);
        })
    });

1 个答案:

答案 0 :(得分:3)

onResume()

当您定义与mysql数据库的新sequalize连接时,如果您没有定义时区而不是UTC时区,则应提及您的时区