Meteor服务器代码更新Mongodb集合,dateField
具有如下价值
ISODate("2016-11-19T00:00:00Z")
客户选择dateStart
和dateFinish
,如下所示
$('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;
}
});
虽然存在某些文件,但代码无法返回任何文件事件。知道为什么以及如何解决它?
答案 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)
并将其传递给查询。