首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ISODate使用Node.js、Express和MongoDB查找

ISODate使用Node.js、Express和MongoDB查找
EN

Stack Overflow用户
提问于 2016-09-13 12:35:52
回答 2查看 2.6K关注 0票数 2

我在one服务器上使用Node.js和Express查询dbserver上的MongoDB,遇到了让日期一起工作的问题,我在这里阅读了很多关于这个问题的线程,最突出的是这个问题:

用MongoDB和Nodejs插入和查询数据

我很确定我明白我应该做什么,但我尝试的一切似乎都没有用。

在我的.js文件中,我有以下内容:

代码语言:javascript
运行
复制
var todayStart = new Date();
todayStart.setSeconds(0);
todayStart.setHours(0);
todayStart.setMinutes(0);
todayStart.setMilliseconds(0);

var todayEnd = new Date(todayStart);
todayEnd.setHours(23);
todayEnd.setMinutes(59);
todayEnd.setSeconds(59);
todayEnd.setMilliseconds(999);

var query = {
    "date": {
        $gte: new Date(todayStart).toISOString(),
        $lte: new Date(todayEnd).toISOString()
    }
};

我的查询var以我期望的格式输出到控制台:

代码语言:javascript
运行
复制
{ date:
   { '$gte': '2016-09-13T00:00:00.000Z',
     '$lte': '2016-09-13T23:59:59.999Z' }
}

我尝试使用我的查询变量或日期值本身,并且都返回null的结果(没有错误):

代码语言:javascript
运行
复制
db.collection('test').findOne(query, function(err, result) {
db.collection('test').findOne({"date" : {$gte: new Date(todayStart).toISOString(),$lte: new Date(todayEnd).toISOString() }}, function(err, result) {

但是,如果像这样插入我的约会日期,它会返回我的结果:

代码语言:javascript
运行
复制
db.collection('test').findOne({"date" : {$gte: new Date("2016-09-13T00:00:00.000Z"),$lte: new Date("2016-09-13T23:59:59.999Z") }}, function(err, result) {

知道我在这里错过了什么吗?

EN

Stack Overflow用户

回答已采纳

发布于 2016-09-13 12:50:17

不需要将日期转换为ISO字符串格式,只需使用JS日期进行查询。有关原因的详细解释,请参阅文档

开始日期对象应该在00:00:00.000 (毫秒精度)保存当前日期时间小时,并将今天日期的小时设置为23:59:59.999,设置为结束日期变量:

代码语言:javascript
运行
复制
var todayStart = new Date();
todayStart.setHours(0,0,0,0);

var todayEnd = new Date();
todayEnd.setHours(23,59,59,999);

var query = {
    "date": {
        $gte: todayStart,
        $lte: todayEnd
    }
};

db.collection('test').findOne(query, function(err, result) {
    if (err) throw new Error();
    console.log(JSON.stringify(result));
});

如果您使用的是动量库,可以通过在当前date对象上使用startOf()endOf()方法,将字符串'day‘作为参数传递:

代码语言:javascript
运行
复制
var todayStart = moment().startOf('day'); // set to 12:00 am today
var todayEnd = moment().endOf('day'); // set to 23:59 pm today
票数 4
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39470285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档