javascript - Sequelize 日期比较插入了错误的时间

标签 javascript mysql node.js sequelize.js

Sequelize 自动插入错误的时间戳。

在我的代码中,我正在执行以下操作:

fromdate = moment(fromdate).format('YYYY-MM-DD'); 
todate = moment(todate).add(1, 'days').format('YYYY-MM-DD');
whereclause['order_date'] = { [Op.between]: [fromdate, todate] };

生成的 SQL 查询如下:

`MyTable`.`mydatetimecolumn` BETWEEN '2020-06-18 04:00:00' AND '2020-06-19 04:00:00';

这个 04:00:00 来自哪里?

列在其实体中的定义如下:

mydatetimecolumn: {
            type: DataTypes.DATE
        }

我正在将sequelize 5.21.2与mysql一起使用。我对可能出现的问题感到困惑。 虽然看起来,sequelize 是自动插入时区时间,但是为什么,如何关闭它或提供其他东西?

即使我这样做 .format('YYYY-MM-DD 00:00:00'),它仍然会将其覆盖为 4:00:00

最佳答案

“这个 04:00:00 来自哪里?”,它来自您的时区。您的服务器必须设置为 GMT-4。 mysql 使用 GMT,但您的脚本/操作系统使用 GMT-4。它是“正确的”(允许对“正确”有不同的解释)。

尝试在连接中设置时区。

const sequelize = new Sequelize(mysql.database, mysql.user, mysql.password, {
    host: mysql.host,
    port:3306,
    dialect:'mysql',
    define: {
      underscored: true,
      freezeTableName: true, //use singular table name
      timestamps: false,  // I do not want timestamp fields by default
    },
    dialectOptions: {
      useUTC: false, //for reading from database
      dateStrings: true,
      typeCast: function (field, next) { // for reading from database
        if (field.type === 'DATETIME') {
          return field.string()
        }
          return next()
        },
    },
    timezone: '-04:00'
});

关于javascript - Sequelize 日期比较插入了错误的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62451752/

相关文章:

javascript - 全局变量有什么不好?

javascript - React 组件中的不同区域

mysql - 通过使用选择连接查询将 2 个列值添加在一起来更新列值

node.js - 如何将变量传递到应该是属性的 MongoDB 查询中

c++ - Node C++ 插件 - 当类型化数组 (Float32Array) 作为参数传递时,如何访问它?

javascript - 不改变变量

javascript - 删除 jQuery 对简单文本旋转的依赖

mysql - 从 SQL 中的每一天获取具有特定列的最后一行

php - 使用 PHP 和 Mysql 使用一个查询将数据插入 2 个表

javascript - 如何在nodejs中更新csv文件