按日期查询不起作用

时间:2016-04-16 09:27:16

标签: node.js mongodb mongoose mongodb-query

我正在尝试为每天创建的每个文档返回搜索结果。以下是我使用的查询。

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

1 个答案:

答案 0 :(得分:2)

这是错误的,因为您没有初始化为.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',但是您的问题可能是一个错字。