【问题标题】:Can't find records in Waterline by date/time无法按日期/时间在 Waterline 中找到记录
【发布时间】:2014-06-24 23:33:21
【问题描述】:

如何比较sails.js 模型中的日期时间?这就是我所做的,但没有运气。

var _date = moment().format('YYYY-MM-DDTHH:mm:ss.SSS') + 'Z';
Game.find({
    where:{
        active: true,
        start: {
            '>=' : _date
        }
    },
    limit: 1,
    sort: 'start asc'
}, function(err, game) {
    console.log('ERROR: ' + err);
    console.log('Game OBJ' + game.toString());
});

【问题讨论】:

    标签: node.js mongodb sails.js mean-stack waterline


    【解决方案1】:

    datetime 类型在 Waterline(Sails ORM)中转换为实际的 Javascript 日期。所以它需要与日期对象进行比较,而不是字符串。您可以保持代码原样,但将第一行更改为:

    var _date = new Date(moment().format('YYYY-MM-DDTHH:mm:ss.SSS') + 'Z');
    

    那么您的查询应该会找到所有在未来开始的Games。

    当然,由于您的代码只是返回当前日期,因此您根本不需要 moment

    var _date = new Date();
    

    也可以。

    【讨论】:

      【解决方案2】:
      var _date = moment().format('YYYY-MM-DDTHH:mm:ss.SSS') + 'Z';
      

      您需要使用下面的行将上面的字符串变量转换为日期变量

      var tempDate = new Date(_date);
      

      现在使用 $gte 代替 '>='

      Game.find({
          where:{
              active: true,
              start: {
                  $gte : tempDate 
              }
          },
          limit: 1,
          sort: 'start asc'
      }, function(err, game) {
          console.log('ERROR: ' + err);
          console.log('Game OBJ' + game.toString());
      });
      

      您还可以使用 $gt、$lt、$lte。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-05
        • 1970-01-01
        • 2023-03-17
        相关资源
        最近更新 更多