MongoDB中
问题描述:
流星服务器代码更新了MongoDB的收集比较日期,dateField
已值看起来像这样ISODate("2016-11-19T00:00:00Z")
MongoDB中
客户端选择一个dateStart
和dateFinish
,像这样
$(“输入[名称=”因此,我转换用户条目,以便我可以使用它来获取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;
}
});
的代码失败,虽然存在某些返回任何文件事件。任何想法为什么以及如何解决它?
答
新日期(年,月,日)变体将具有当前系统时区中的日期。
比较没有返回任何结果的原因是,当您在本地系统区域中传递日期时,流星执行从本地日期时间到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)
,并把它传递给查询。
您在代码中评论说'上述两种打印方式:2016年11月19日00:00:00 GMT + 1100(AEDT)',这样只有文档的日期字段的值才是确切的'Sat Nov 19 2016 00: 00:00 GMT + 1100(AEDT)'将返回。 – Khang
当你从查询中删除$ lte:end时它会起作用吗? – Veeram
@Khang为了进行压缩,将一个日期转换为另一个日期的最佳方法是什么?现在确定这是否是问题,因为如果日期值更改,相同的代码工作正常。 –