我有以下续集查询:
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 在Object.escape(C:\ Users \ George \ Source \ Repos \ myProj \ node_modules \ sequelize \ lib \ sql-string.js:50:11) 在Object.escape(C:\ Users \ George \ Source \ Repos \ myProj \ node_modules \ sequelize \ lib \ dialects \ abstract \ query-generator.js:917:22)
现在我不知道1506211200000
号码的来源,arr[index + 1]
和period
都是moment.js对象,我可以通过这样做验证这一点打印console.log(arr[index + 1].isValid(), period.isValid());
的{{1}}。如果删除createdAt限制,则没有问题。
知道这里发生了什么吗?
注意:我正在使用Postgres
答案 0 :(得分:3)
您需要使用moment
方法将Date
对象转换为moment#toDate
对象,才能在续集查询中使用它:
...
createdAt: {
$lt: arr[index + 1].toDate(),
$gt: period.toDate()
},
答案 1 :(得分:0)
补充已接受的答案:如果您需要知道时区,您可能需要使用 moment 对象中的 format
方法。像这样:
...
where: {
createdAt: {
Op.lt: arr[index + 1].format(),
Op.gt: period.format()
}
...
}
使用 toDate
方法时,它将使用本地时区,因此在将代码部署到生产环境时,您可能会遇到看似拜占庭的错误,因为您部署的机器可能与您的本地机器具有不同的时区。
您可以进一步阅读有关此主题的内容 here。