比较mongodb中的日期

时间:2016-11-19 08:35:21

标签: mongodb date datetime meteor

Meteor服务器代码更新Mongodb集合,dateField具有如下价值  ISODate("2016-11-19T00:00:00Z")

客户选择dateStartdateFinish,如下所示      $('input [name =“startDateStr”]')。val()// => “2016年11月19日”

所以我转换了用户条目,以便我可以使用它来获取与下面的mongodb查询匹配的dateField的文档;

dateToISO: (date) => { // date format in YYYY-MM-DD
  const dArr = date.split('-');
  return new Date(parseInt(dArr[0]), parseInt(dArr[1]) - 1, parseInt(dArr[2]));
}

然后将结果呈现给用户,其中日期为格式DD / MM / YYYY

      let start = utility.dateToISO(dict.get('inquiryStartDate'));
      let end = utility.dateToISO(dict.get('inquiryEndDate'));

////Both of the above prints: Sat Nov 19 2016 00:00:00 GMT+1100 (AEDT)

     return myCol.find({
        date: {
          $gte: start,
          $lte: end
        }
      }, {
        transform: function(doc) {
          doc.date = moment(doc.date).format('DD/MM/YYYY');
          return doc;
        }
      });

虽然存在某些文件,但代码无法返回任何文件事件。知道为什么以及如何解决它?

1 个答案:

答案 0 :(得分:0)

新日期(年,月,日)变体将具有当前系统时区中的日期。

您比较的原因不会返回任何结果,当您在本地系统区域中传递日期时,meteor执行从本地日期时间到UTC日期时间的转换,因为Mongo DB日期时间是UTC时间。因此,您的输入日期将从2016年11月19日星期六00:00:00 GMT + 1100(AEDT)变为2016年11月18日星期五01:00:00 UTC。

将用户输入日期视为UTC。您只需要明确地将日期解析为UTC。

尝试

new Date(Date.UTC(2016, 11, 19, 0, 0, 0, 0)

并将其传递给查询。