自动插入错误的时间戳。
在我的代码中,我正在做以下工作:
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
}
我正在使用Sequelize5.21.2和MySQL。 我被可能出了什么问题难住了。 虽然看起来,sequelize是自动插入时区小时,但为什么,如何关闭它或提供其他东西?
即使我做了.format('yyyy-mm-dd 00:00:00')
,它仍然会将它覆盖为4:00:00
。
“这个04:00:00是从哪里来的?”,它来自你的时区。 您的服务器必须设置为GMT-4。 mysql使用的是GMT,但您的脚本/OS使用的是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'
});