我有以下续集查询:
let prms = periods.map((period, index, arr) => {
if (arr[index + 1]) {
return sequelize.models.Result.aggregate('value', 'avg', {
where: {
createdAt: {
$lt: arr[index + 1],
$gt: period
},
type: hook.params.headers.type,
entityId: hook.params.headers.entity
}
}).catch(err => console.log('err'));
}
})
现在,where 对象上的createdAt
属性导致我这个问题:
错误:无效值1506211200000 at Object.escape (C:\Users\George\Source\Repos\myProjode_modules\sequelize\lib\sql-string.js:50:11) at Object.escape (C:\Users\George\Source\Repos\myProjode_modules\sequelize\lib\dialects\abstract\query-generator.js:917:22)
现在我不知道1506211200000
数字来自哪里,arr[index + 1]
和period
都是瞬间.js对象,我可以通过执行打印true true
console.log(arr[index + 1].isValid(), period.isValid());
来验证这一点。如果删除创建限制,则没有问题。
知道这里发生了什么吗?
注意:我正在使用Postgres
您需要使用moment#toDate
方法moment
对象转换为Date
对象,才能在续集查询中使用它:
...
createdAt: {
$lt: arr[index + 1].toDate(),
$gt: period.toDate()
},
补充公认的答案:如果您需要它能够识别时区,则可能需要从 moment 对象使用format
方法。这样:
...
where: {
createdAt: {
Op.lt: arr[index + 1].format(),
Op.gt: period.format()
}
...
}
使用toDate
方法,它将使用本地时区,因此在将代码部署到生产环境时,可能会收到看似拜占庭式的错误,因为要部署的计算机可能与本地计算机具有不同的时区。
您可以在此处阅读有关此主题的更多信息。