2016-11-19 63 views
1

流星服务器代码更新了MongoDB的收集比较日期,dateField已值看起来像这样
ISODate("2016-11-19T00:00:00Z")MongoDB中

客户端选择一个dateStartdateFinish,像这样
$(“输入[名称=”因此,我转换用户条目,以便我可以使用它来获取dateField与下面的mongodb查询匹配的文档;

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; 
     } 
     }); 

的代码失败,虽然存在某些返回任何文件事件。任何想法为什么以及如何解决它?

+0

您在代码中评论说'上述两种打印方式:2016年11月19日00:00:00 GMT + 1100(AEDT)',这样只有文档的日期字段的值才是确切的'Sat Nov 19 2016 00: 00:00 GMT + 1100(AEDT)'将返回。 – Khang

+0

当你从查询中删除$ lte:end时它会起作用吗? – Veeram

+0

@Khang为了进行压缩,将一个日期转换为另一个日期的最佳方法是什么?现在确定这是否是问题,因为如果日期值更改,相同的代码工作正常。 –

回答

0

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

比较没有返回任何结果的原因是,当您在本地系统区域中传递日期时,流星执行从本地日期时间到UTC日期时间的转换,因为Mongo DB日期时间处于UTC时间。因此,您的输入日期从2016年11月19日00: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) 

,并把它传递给查询。