我正在尝试返回当天创建的每个文档的搜索结果。下面是我使用的查询。
var query = Document.find({}).populate('contacts');
var gte = moment(req.query.date, 'DD-MM-YYYY').startOf('Day');
var lte = moment(req.query.date, 'DD-MM-YYYY').endOf('Day');
query.where('dates.createdAt').gte(gte).lt(lte);
此查询在某些天内有效,但并非全部有效。我似乎无法理解这种行为。请大家帮忙。
查询字符串中日期的格式为DD/MM/YYYY
。
适用于:2016-04-16T00:02:30.065Z
不适用于:2016-04-15T19:02:59.758Z
最佳答案
这是错误的,因为您没有初始化为 .utc()
,并且 MongoDB 日期存储在 UTC 中:
var gte = moment.utc(req.query.date, 'DD-MM-YYYY');
var lte = moment.utc(req.query.date, 'DD-MM-YYYY').endOf('Day');
而且也不需要 startOf()
。
如果您不这样构造,则生成的 Date
对象会因本地时区的差异而出现偏差。因此,为什么您看不到时间与日期交叉的选择。
此外,如果日期输入为 01/01/2016
,则格式字符串将为 'DD/MM/YYYY'
,但其中之一可能是您的问题中有一个拼写错误。
关于node.js - 按日期查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36662419/