javascript - Sequelize 日期比较插入错误的时间
问题描述
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
}
我正在使用 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'
});
推荐阅读
- c# - 我做了一个方法,如果我称它为错误 c#。我如何解决它?
- javascript - 对于某些用户,PDF 表单保存为 FDF,但需要保留为 pdf。如何修复/覆盖这个?
- python-3.x - 如何解析字符串以获取国家/地区名称?
- docker - 在 docker 的 tomcat9 中找不到管理器应用程序
- laravel - 在 URL 上添加用户 ID
- python - OOP - Python 类/R 类比
- assembly - 为 MS-DOS Int 24h 严重错误处理程序设置堆栈
- heroku - Heoku Github 操作部署 - CI/CD - 无法推送分支,因为该分支位于已部署的分支后面
- c++ - 为什么 rand() 函数在在线编译器上返回 1804289383?
- java - 使用 lsp 在 spacevim 中为 java 添加 lombok