【问题标题】:Query by Date not working按日期查询不起作用
【发布时间】:2016-04-16 19:29:43
【问题描述】:

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

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

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 2020-07-06
      • 1970-01-01
      相关资源
      最近更新 更多