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

Javascript Sequelize日期比较插入了错误的时间,javascript,mysql,node.js,sequelize.js,Javascript,Mysql,Node.js,Sequelize.js,续集自动插入错误的时间戳 在我的代码中,我正在执行以下操作: 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`.`mydatetimecolum

续集自动插入错误的时间戳

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

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
        }
我在mysql中使用sequelize 5.21.2。我对可能出现的问题感到困惑。 虽然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'
});