续集不接受有效时刻.js对象在 where 子句中



我有以下续集查询:

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 trueconsole.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方法,它将使用本地时区,因此在将代码部署到生产环境时,可能会收到看似拜占庭式的错误,因为要部署的计算机可能与本地计算机具有不同的时区。

您可以在此处阅读有关此主题的更多信息。

最新更新