Javascript 如何使用sequelize与postgres进行日期比较
我想删除所有日期在20分钟前的记录。Postgres(或Sequelize)不满意我提供的裸javascriptJavascript 如何使用sequelize与postgres进行日期比较,javascript,postgresql,date,sequelize.js,Javascript,Postgresql,Date,Sequelize.js,我想删除所有日期在20分钟前的记录。Postgres(或Sequelize)不满意我提供的裸javascriptDate对象作为比较值 我在Postgres9.6数据库上使用Sequelize4.37 所讨论的列是用类型声明的:Sequelize.DATE,研究表明它相当于带时区的时间戳:一个精确到微秒的完整日期和时间以及一个时区符号。(这也是我在使用psql CLI工具描述表时看到的。) 因此,我这样做: const Sequelize = require('sequelize') const
Date
对象作为比较值
我在Postgres9.6数据库上使用Sequelize4.37
所讨论的列是用类型声明的:Sequelize.DATE
,研究表明它相当于带时区的时间戳:一个精确到微秒的完整日期和时间以及一个时区符号。(这也是我在使用psql CLI工具描述表时看到的。)
因此,我这样做:
const Sequelize = require('sequelize')
const { SomeModel } = require('../models.js')
// calculate 20 minutes ago
async function deleteStuff() {
const deletionCutoff = new Date()
deletionCutoff.setMinutes( deletionCutoff.getMinutes() - 20 )
await SomeModel.destroy({
where: {
[ Sequelize.Op.lt ]: { dateColumn: deletionCutoff }
}
})
但我得到了这个错误:
Error: Invalid value { dateColumn: 2018-11-21T21:26:16.849Z }
文档建议我应该能够提供一个简单的javascript日期或ISO8601字符串,但两者都抛出相同的无效值
错误。唯一的区别是,如果我传递一个字符串,错误会在值周围显示单引号:
// error when dateColumn: deletionCutoff.toISOString()
Error: Invalid value { dateColumn: '2018-11-21T21:26:16.849Z' }
这太尴尬了。我错误地构造了where
子句
// BAD CODE
await SomeModel.destroy({
where: {
[ Sequelize.Op.lt ]: {
dateColumn: deletionCutoff
}
}
})
// GOOD CODE
await SomeModel.destroy({
where: {
dateColumn: {
[ Sequelize.Op.lt ]: deletionCutoff
}
}
})
也许我应该删除这个问题。也许不会——我的错误可能会更有帮助。你也可以接受你的答案。我认为这很有用不得不等2天。仍然可以删除它。。。我们来看看它会聚集多少仇恨。