比较日期以检索数据

时间:2012-01-13 13:35:15

标签: node.js mongodb mongoose

我在mongodb中有类似的数据

{ "_id" : ObjectId("4f0ee7310b09f7a254000001"), "createdAt" : ISODate("2012-01-12T23:58:28Z") }
{ "_id" : ObjectId("4f0ee7350b09f7a254000002"), "createdAt" : ISODate("2012-01-12T23:58:28Z") }
{ "_id" : ObjectId("4f0ee855e63cecb654000001"), "createdAt" : ISODate("2012-01-13T00:03:59Z") }
{ "_id" : ObjectId("4f0ee859e63cecb654000002"), "createdAt" : ISODate("2012-01-13T00:04:08Z") }
{ "_id" : ObjectId("4f0ee97c212d70bc54000001"), "createdAt" : ISODate("2012-01-13T00:08:54Z") }
{ "_id" : ObjectId("4f0ee99f212d70bc54000002"), "createdAt" : ISODate("2012-01-13T00:09:27Z") }

我想只显示基于日期的记录。检查我的代码,它什么都没有给我回复

//dateStr = '120112' or '120113'
var year = '20' + dateStr.substring(0,2);
var month =  dateStr.substring(2,4);
var day =  dateStr.substring(4);
dateStr = new Date(year,month,day,0,0,0);

var nextDate = new Date(year,month,day,23,59,59);

GPSData.find({"createdAt" : { $gte : dateStr, $lte:  nextDate }}, function(err, data) {
    if(err)
        console.log(err); 

    res.writeHead(200, {
            "Content-Type": "application/json",
            "Access-Control-Allow-Origin": "*"
    });
    var body = JSON.stringify(data);
    res.end(body);  //no output here just []
});

但在使用此命令的mongo shell上,我收到日期'120112'的结果

db.gpsdatas.find({"createdAt" : {new ISODate("2012-01-12T00:00:00Z"), $lte: new ISODate("2012-01-12T23:59:59Z") }});

2 个答案:

答案 0 :(得分:1)

您的问题是您对Date类的理解。我假设您正在尝试创建1月12日的日期对象,但新日期(2012年,1月12日)实际上是2月11日或12日,具体取决于当地时区。因此,您的代码不会执行您在shell中执行的查询。

在此处阅读详细信息http://www.w3schools.com/jsref/jsref_obj_date.asp

答案 1 :(得分:0)

盲人回答,没有自己进行任何测试:如果在GPSData.find(..)行之前添加此行,会发生什么?

dateStr = dateStr.toString();
nextDate = nextDate.toString();

另外,尝试使用console.log来查看输出字符串的外观。它可能与您期望的格式完全不同。