按时间搜索 - MongoDB / NodeJS

时间:2013-12-31 05:01:55

标签: javascript node.js mongodb

我有一份包含以下时间的文件:

 "time" : ISODate("2013-12-31T03:00:00Z")

我目前正在尝试使用带有Node.JS驱动程序的MongoDB查询来查找此文档。

var time = new Date(2013,11,31,3,0,0,0);

此日期使用console.log()

按如下方式打印出来
Tue Dec 31 2013 03:00:00 GMT-0500 (EST)

当我尝试使用标准collection.findOne(我肯定查询本身不是问题,而不是时间戳)来查找此文档时,它找不到文档。 Mongo shell显示文档存在。我是如何错误地格式化时间的呢?

编辑: 我也会添加查询。

collection.findOne(
        {
         "time" : time},
        {"_id" : 0},
        function(err, items){
            if (err){
                throw err;
            }
            console.log(err);
            console.log(items);
            res.send(items);
    });

1 个答案:

答案 0 :(得分:2)

您有时区问题。您要查找的时间戳为2013-12-31T03:00:00Z,尾随Z表示“零时区偏移”。但是您正在使用的new Date版本:

var time = new Date(2013,11,31,3,0,0,0);

解释当前时区中的所有值。如果我们查看您的console.log输出:

Tue Dec 31 2013 03:00:00 GMT-0500 (EST)

我们可以看到您在EST时区,并且您的time在EST中为03:00而在UTC中为03:00

可能最简单的方法是在创建Date实例之前使用Date.UTC将组件转换为UTC:

var time = new Date(Date.UTC(2013,11,31,3,0,0,0));

现在,2013-12-31T03:00:00Z中应该有time,您的查询应该会更好。