我有一份包含以下时间的文件:
"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);
});
答案 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
,您的查询应该会更好。