无法按日期/时间在 Waterline 中找到记录

Posted

技术标签:

【中文标题】无法按日期/时间在 Waterline 中找到记录【英文标题】:Can't find records in Waterline by date/time 【发布时间】: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());
);

【问题讨论】:

【参考方案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。

【讨论】:

以上是关于无法按日期/时间在 Waterline 中找到记录的主要内容,如果未能解决你的问题,请参考以下文章

SailsJS,Waterline用select填充记录

使用两个未绑定的文本框按日期范围过滤表单记录

SailsJS / Waterline ORM:仅使用一个查询更新多个条目

如何在 Sails 中恢复生命周期回调?

如何在 django 中按日期范围过滤记录?

MongoError:在对嵌套文档中的记录进行分组时,无法从缺少的 BSON 类型转换为日期