我遇到的问题是,提交的日期字段是带时间戳的返回日期,而不仅仅是时间戳设置为00:00:00
的日期。此代码适用于我尝试实现此过程的其他实例,但由于某种原因它无法正常工作,我很好奇是否转换必须在我的视图中发生在我的视图中,或者应该发生在我的后端内部路由。
路线:
.post(function(req, res){
models.Creator.findAll({
order: 'createDate DESC',
where: {
dataDateStart: {
$gte: moment(req.body.startDate).utc().format("YYYY-MM-DD")
},
dataDateEnd: {
$lte: moment(req.body.endDate).utc().format("YYYY-MM-DD")
}
},
include: [{
model: models.User,
where: {
organizationId: req.user.organizationId,
},
attributes: ['organizationId', 'userId']
}],
limit: 10
}).then(function() {
res.redirect('/app');
}).catch(function(error){
res.send(error);
})
});
输出where子句:
WHERE `creator`.`data_date_start` >= '2016-06-07 04:00:00' AND `creator`.`data_date_end` <= '2016-06-11 04:00:00' ORDER BY createDate DESC LIMIT 10;
正如您所看到的,问题是04:00:00
而不是00:00:00
查看:
<div class="row">
<div class="creator-search-form col-md-6 col-md-offset-3">
<h1 id="search-header">Filter Feed</h1>
<form action="/app" method="post" class="creator-filter-fields">
<p>Date Range:</p>
<input type="date" name="startDate">
<input type="date" name="endDate">
<button type="submit" id="creator-filter-submit">Submit</button>
</form>
</div>
</div>
答案 0 :(得分:1)
我希望您的情况发生的事情是在Moment下游的某个地方,没有时间的日期被解释为本地时间,然后转换为UTC。我猜你的服务器设置为UTC-4(美国东部夏令时?),这就是你看到你做什么的原因。
当您使用.format('YYYY-MM-DD')
更改为.format()
时,结果字符串包含所有时间部分和偏移量,如下所示:
moment.utc('2016-01-01').format()
"2016-01-01T00:00:00Z"
因为上面的日期是完全明确的,你在堆栈中改变时间的任何事情都不会做出任何关于如何解释它的奇怪决定,并且一切正常。
答案 1 :(得分:0)
如果来自日期元素的查询值是格式为YYYY-MM-DD的字符串,那么您可以通过
获得结果moment.utc(value).format("YYYY-MM-DD")
其中值是日期字符串。
我希望这会有所帮助。