Mar*_*sen 38 javascript node.js sequelize.js
我使用sequelize作为我的后端ORM.现在我想做一些日期操作.
更多Speceficly我想获得所有数据,其中的日期是从现在开始,7天后.
问题是文档没有指定您可以执行哪些操作 Datatypes.DATE
谁能指出我正确的方向?
小智 48
我不得不从sequelize中导入Operators符号并像这样使用.
const { Op } = require('sequelize')
model.findAll({
where: {
start_datetime: {
[Op.gte]: moment().subtract(7, 'days').toDate()
}
}
})
Run Code Online (Sandbox Code Playgroud)
根据文档,出于安全原因,这被认为是最佳实践.
有关详细信息,请参阅http://docs.sequelizejs.com/manual/tutorial/querying.html.
使用没有任何别名的Sequelize可以提高安全性.一些框架会自动将用户输入解析为js对象,如果您无法清理输入,则可能会将带有字符串运算符的Object注入Sequelize.
(......)
为了更好的安全性,强烈建议使用Sequelize.Op并且完全不依赖于任何字符串别名.您可以通过设置operatorAliases选项来限制应用程序所需的别名,记住清理用户输入,特别是当您直接将它们传递给Sequelize方法时.
Eva*_*oky 39
就像Molda说,你可以使用$gt,$lt,$gte或$lte用日期:
model.findAll({
where: {
start_datetime: {
$gte: moment().subtract(7, 'days').toDate()
}
}
})
Run Code Online (Sandbox Code Playgroud)
mar*_*peg 12
您还可以使用Sequelize.literal()在 SQL 中执行日期操作。
以下代码适用于 Postgres,但我很确定在其他系统中也可以执行类似的操作:
model.findAll({
where: {
start_datetime: {
$gte: Sequelize.literal('NOW() - INTERVAL \'7d\''),
}
}
})
Run Code Online (Sandbox Code Playgroud)
该解决方案是没有的moment.js图书馆。
const sevenDaysAgo = new Date(new Date().setDate(new Date().getDate() - 7));
models.instagram.findAll({
where: {
my_date: {
$gt: sevenDaysAgo,
$lt: new Date(),
},
},
});
Run Code Online (Sandbox Code Playgroud)
const sevenDaysFromNow = new Date(new Date().setDate(new Date().getDate() + 7));
models.instagram.findAll({
where: {
my_date: {
$gt: new Date(),
$lt: sevenDaysFromNow,
},
},
});
Run Code Online (Sandbox Code Playgroud)
笔记:
$gt代表“大于”。您可以使用$gte代替$gt. $gte代表“大于或等于”。同为$lte当然的。$lt并$gt确保日期不会在未来(根据原始问题)。[Sequelize.Op.gt]代替$gt。如果在 Sequelize v5 上使用它。| 归档时间: |
|
| 查看次数: |
27128 次 |
| 最近记录: |