我使用sequelize作为我的后端ORM。现在我想做一些日期操作。
更多Speceficly我想获得所有数据,其中的日期是从现在开始和7天后。
问题是文档没有指定您可以对Datatypes.DATE
有人能指出我正确的方向吗?
答案 0 :(得分:30)
就像Molda所说,你可以使用$gt
,$lt
,$gte
或$lte
来表示日期:
model.findAll({
where: {
start_datetime: {
$gte: moment().subtract(7, 'days').toDate()
}
}
})
答案 1 :(得分:24)
我必须从sequelize中导入Operators符号并使用它。
const { Op } = require('sequelize')
model.findAll({
where: {
start_datetime: {
[Op.gte]: moment().subtract(7, 'days').toDate()
}
}
})
根据文档,出于安全原因,这被认为是最佳做法。
有关详细信息,请参阅http://docs.sequelizejs.com/manual/tutorial/querying.html。
使用没有任何别名的Sequelize可以提高安全性。一些框架 自动将用户输入解析为js对象,如果没有 清理您的输入可能会注入一个Object 字符串运算符到Sequelize。
(...)
为了更好的安全性,强烈建议使用Sequelize.Op而不是 依赖于任何字符串别名。你可以限制你的别名 应用程序将需要通过设置operatorAliases选项,记住 清理用户输入,尤其是在直接传递给用户时 续集方法。
答案 2 :(得分:1)
此解决方案是没有 moment.js
库。
const sevenDaysAgo = new Date(new Date().setDate(new Date().getDate() - 7));
models.instagram.findAll({
where: {
my_date: {
$gt: sevenDaysAgo,
$lt: new Date(),
},
},
});
const sevenDaysFromNow = new Date(new Date().setDate(new Date().getDate() + 7));
models.instagram.findAll({
where: {
my_date: {
$gt: new Date(),
$lt: sevenDaysFromNow,
},
},
});
注意:
$gt
代表“大于”。您可以使用$gte
代替$gt
。 $gte
代表“大于或等于”。当然$lte
也一样。$lt
和$gt
来确保日期不是将来的日期(按原始问题)。[Sequelize.Op.gt]
代替$gt
。如果在Sequelize v5上使用它。答案 3 :(得分:0)
您还可以使用<form action=" {{url_for('add_site') }}" method="POST">
<div class="form-group{% if form.site_name.errors %} has-error{% endif %}">
{{ form.site_name.label(for_='site_name') }}
{{ form.site_name(class='form-control') }}
{% if form.site_name.errors %}
<span class="help-block">{{ form.site_name.errors[0] }}</span>
{% endif %}
</div>
<div class="form-group{% if form.organisation.errors %} has-error{% endif %}">
{{ form.organisation.label }}
{{ form.organisation(class='form-control') }}
</div>
{{ form.csrf_token }}
{{ form.submit(class='btn btn-default', value='Add Site') }}
</form>
在SQL中执行日期操作。
以下代码可与Postgres一起使用,但我确信在其他系统中也可以完成类似的操作:
Sequelize.literal()