我正在使用Meteor创建约会应用。我需要返回所选日期的约会。
这是我的数据结构
{ "lastname" : "adsads", "firstname" : "adsadsads", "time" : "12:00 PM", "notes" : "adsadsads", "length" : 15, "date" : ISODate("2014-08-31T00:00:00Z"), "createdAt" : ISODate("2014-08-31T04:02:12.367Z"), "_id" : "gTxgn5ysRBYCros9z" }
查询代码:
console.log("Starting query build.")
var theDate = Session.get("date");
console.log(theDate);
startDate = moment(theDate).zone(-12).startOf("day")._d;
console.log(startDate);
endDate = moment(theDate).zone(-12).endOf("day")._d;
console.log(endDate);
queryPointer = appointmentList.find({date: {$gte: startDate, $lt: endDate}})
console.log(queryPointer.fetch());
我使用._d从中提取内部Date对象。 getDate()在返回之前将Date转换为UTC。我知道这是不好的做法,在当地时间存储日期,但我这样做是为了让这个该死的东西起作用。如果我能找到根本原因,我将切换回UTC。
字符串化查询:
"{"date":{"$gte":"2014-08-31T00:00:00.000Z","$lt":"2014-08-31T23:59:59.999Z"}}"
控制台输出:
"Starting query build." appointmentViewer.js:13
Date 2014-08-31T01:00:00.000Z appointmentViewer.js:15
Date 2014-08-31T00:00:00.000Z appointmentViewer.js:17
Date 2014-08-31T23:59:59.999Z appointmentViewer.js:19
Array [ ]
提前感谢您的任何帮助!
答案 0 :(得分:0)
这就是我将日期存储为字符串的原因,尤其是在没有时间数据的情况下。见this answer。您似乎没有从Date()类型中获得任何好处,并且它会让您感到痛苦。字符串没什么问题。
只需使用.find({date: '2014-08-31'})
即可完成。
答案 1 :(得分:0)
这是我之前遇到的同样问题的解决方案。
来自日期选择器:
$('#start-datepicker').datepicker({
format: "yyyy-mm-dd",
autoclose:true
});
$('#end-datepicker').datepicker({
format: "yyyy-mm-dd",
autoclose:true
});
这是棘手的部分。定义从日期+时间00:00:00到23:59:59
的日期var xdate1 = t.find('.startDate').value;
var xdate2 = t.find('.endDate').value + " 23:59:59";
var date1 = moment(xdate1).format("YYYY-MM-DDTHH:mm:ssZ");
var date2 = moment(xdate2).format("YYYY-MM-DDTHH:mm:ssZ");
date1 = new Date(date1);
date2 = new Date(date2);
Session.set("giftsStartDate", date1);
Session.set("giftsEndDate", date2);
答案 2 :(得分:0)
唉,我很抱歉,我刚刚解决了这个问题,忘记回答了!
问题在于我对Meteor中的集合如何工作缺乏了解。我在页面加载时立即进行查询,这意味着服务器订阅没有发送数据来填充客户端minimongo dbs。解决方案是抛弃单击查询并将查询移动到反应计算 - 在我的例子中是模板助手,其中显示数据的模板将在数据填充本地数据库时自动更新。
最后我搬到了铁路由器,并使用它的waitOn功能只在数据到达时显示我的模板。