【发布时间】:2019-04-24 13:00:24
【问题描述】:
我想删除日期早于 20 分钟的所有记录。 Postgres(或 Sequelize)对我提供的作为比较值的裸 javascript Date 对象不满意。
我在 postgres 9.6 数据库之上使用 sequelize 4.37。
有问题的列是用type: Sequelize.DATE 声明的,研究表明它等同于TIMESTAMP WITH TIME ZONE:具有微秒精度和时区指示符的完整日期和时间。 (这也是我使用 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 字符串,但两者都会抛出相同的 Invalid Value 错误。唯一的区别是,如果我传递一个字符串,错误会在值周围显示单引号:
// error when dateColumn: deletionCutoff.toISOString()
Error: Invalid value { dateColumn: '2018-11-21T21:26:16.849Z' }
【问题讨论】:
标签: javascript postgresql date sequelize.js