Sequelize不会将修改日期返回为UTC

时间:2018-05-09 09:43:20

标签: sequelize.js

我们在构建MySQL数据库之后很久就开始使用Sequelize了。我们有两列,"创建"和"修改",存储创建记录的日期和修改记录的时间。

"创建" column的类型为" DATETIME",默认值为" CURRENT_TIMESTAMP"。 "修改"列的类型为" TIMESTAMP"默认值为" ON UPDATE CURRENT_TIMESTAMP"。 MySQL使用UTC存储日期和时间。

在Sequelize的模型中,我们设置" timestamps:false",并配置"创建和"修改"列如下:

created:DataTypes.DATE,

已修改:DataTypes.DATE

这允许我们在需要时拉出创建和修改的时间,但让MySQL数据库根据默认值记录这些值。

如果我要使用findAll方法进行简单查询,那么在返回的数据中,"创建" value返回UTC,就像在数据库中一样。然而,"修改"值不是像数据库中那样的UTC,而是落后两个小时。我目前的时区比UTC早两个小时,看起来像Sequelize认为"修改了"列在我的本地时区而不是UTC。当我们想要开始基于"修改的"来开始操作数据时,这会引起巨大的问题。值。

我有什么办法可以在Sequelize中纠正这个问题,或者我是否必须重新考虑数据库表的配置方式。

1 个答案:

答案 0 :(得分:0)

如果使用UTC,则可能不需要时区。

例如,我的mysql服务器是时区“ +08:00”,

“ mysql2”:“ ^ 1.6.4”, “ sequelize”:“ ^ 4.41.2”

const sequelize = new Sequelize(database, username, password, {
    host: hostname,
    port: port,
    dialect: 'mysql',
    dialectOptions: {
        typeCast: function (field, next) {
            if (field.type == 'DATETIME' || field.type == 'TIMESTAMP') {
                return new Date(field.string() + 'Z');
            }
            return next();
        }
    },
    operatorsAliases: false,
    pool: {
        max: 5,
        min: 0,
        acquire: 30000,
        idle: 10000
    }
});