【问题标题】:Compare date (moment.js) in MongoDB在 MongoDB 中比较日期(moment.js)
【发布时间】:2015-10-07 03:28:19
【问题描述】:

我想比较来自 MongoDB 的日期和我的日期。

我还阅读了thisthis 的帖子,但没有找到答案。

我的代码:

  today: function() {
    var today = moment().format();
    return Posts.find({createdAt : { $gte : today}}) // show posts created in "future" , so this function must return nothing
  },

createdAt = moment().format();// in MongoDB

因此这种构造不起作用,但如果我比较谎言:

var today = moment().format();
var daystart  = moment().startOf('day').format();
if (daystart > today){
  console.log ("YES");
}
else if (daystart < today)console.log ("NO");

返回

"NO"

有人帮忙吗?

编辑:

  today: function() {
    var today = moment().toDate();
    var daystart  = moment().startOf('day').toDate();
    // console.log(today + daystart);
    return Posts.find({createdAt : { $gt : today}}) 
  },
  week: function() {
          var today = new Date();
      return Posts.find({createdAt : { $lt : today}}) 
  },
  month: function() {
            var today = new Date();
      return Posts.find({createdAt : { $ne : today}}) 
  }

createdAt = new Date();

【问题讨论】:

    标签: mongodb momentjs


    【解决方案1】:

    .format() 方法是一个显示辅助函数,它根据传递的令牌参数返回日期字符串表示。要将 MongoDB 中的日期与当前日期和时间进行比较,只需调用 moment() 不带参数,不带 .format() 方法并获取本地 Date 对象Moment.js 通过调用 toDate() 方法进行包装:

    today: function() {
        var now = moment().toDate();
        return Posts.find({createdAt : { $gte : now }});
    }
    

    【讨论】:

    • 我们其他人认为您必须在时刻对象上调用 .toDate() 才能返回对序列化有效的 JavaScript Date 对象。
    • 在 mongo 中我必须这样写 createdAt = moment()createdAt = moment().toDate()
    • @nlpkr 你可以写成createdAt = moment().toDate() 或者干脆写成createdAt = new Date();
    • @nlpkr 在 Mongo shell 中,您可以创建一个保存当前日期和时间的变量,并在查询中使用它,例如var now = new Date(); db.posts.find({createdAt: {$gt: now}}),这是您想要的吗?
    • 我在使用.toISOString() 并尝试调试 2 小时后... :facepalm:, 终于完成了这项工作
    【解决方案2】:

    使用 Moment JS 在 JavaScript 中将日期转换为 MongoDB ISODate 格式

    MongoDB 使用 ISODate 作为它们的主要日期类型。如果要将日期对象插入到 MongoDB 集合中,可以使用 Date() shell 方法。

    您可以通过将年份在 0 到 9999 之间的 ISO-8601 日期字符串传递给 new Date() 构造函数或 ISODate() 函数来指定特定日期。这些函数接受以下格式:

    • new Date("&lt;YYYY-mm-dd&gt;") 返回指定日期的 ISODate。
    • new Date("&lt;YYYY-mm-ddTHH:MM:ss&gt;") 指定客户端本地时区的日期时间,并返回具有指定日期时间的 ISODate UTC。
    • new Date("&lt;YYYY-mm-ddTHH:MM:ssZ&gt;") 以 UTC 格式指定日期时间,并以 UTC 格式返回具有指定日期时间的 ISODate。
    • new Date() 将日期时间指定为自 Unix 纪元(1970 年 1 月 1 日)以来的毫秒数,并返回生成的 ISODate 实例。

    如果您使用 JavaScript 编写代码,并且想要传递 JavaScript 日期对象并将其与 MongoDB 客户端一起使用,那么您要做的第一件事就是将 JavaScript 日期转换为 MongoDB 日期格式 (ISODate)。以下是你的做法。

        var today = moment(new Date()).format('YYYY-MM-DD[T00:00:00.000Z]');
        console.log("Next day -- " + (reqDate.getDate() + 1))
        var d = new Date();
        d.setDate(reqDate.getDate() + 1);
        var tomorrow = moment(d).format('YYYY-MM-DD[T00:00:00.000Z]');
    

    您可以使用新的 Date() shell 方法将今天和明天的对象传递给 MongoDB 查询。

      MongoClient.connect(con, function (err, db) {
        if (err) throw err
        db.collection('orders').find({ "order_id": store_id, "orderDate": {     
           "$gte": new Date(today), "$lt": new Date(tomorrow)}
         }).toArray(function (err, result) {
            console.log(result);
            if (err) throw err
              res.send(result);
        })
      })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 2015-05-28
      • 1970-01-01
      相关资源
      最近更新 更多