使用 Moment 比较日期以过滤结果

Using Moment to compare dates to filter results

我正在尝试按每个对象中的日期键过滤对象数组。

for (var e = 0; e < arrayOfObjects.length; e++){
    var objects = arrayOfObjects[e];
    var sortDate = _.filter(objects, function(n) {moment(n.date).isAfter(moment(timeCreated).subtract(110, 'days'))});
    console.log(sortDate); //console.log((moment(timeCreated).subtract(110, 'days')));
}

此代码returns 一个空数组。在 timeCreated 之前和之后混合了多个日期 - 110 天。我还控制台记录了比较的每个部分:

   Moment {_isAMomentObject: true, _i: "2014-07-24", _f: "YYYY-MM-DD ", _isUTC: false, _pf: Object…}_d: Thu Jul 24 2014 00:00:00 GMT-0700 (PDT)_f: "YYYY-MM-DD "_i: "2014-07-24"_isAMomentObject: true_isUTC: false_locale: Locale_pf: Object__proto__: Moment
dateCompare.controller.js:91 

Moment {_isAMomentObject: true, _i: Thu Feb 12 2015 20:22:41 GMT-0800 (PST), _isUTC: false, _pf: Object, _locale: Locale…}_d: Fri Nov 14 2014 20:22:41 GMT-0800 (PST)_i: Thu Feb 12 2015 20:22:41 GMT-0800 (PST)_isAMomentObject: true_isUTC: false_locale: Locale_pf: Object__proto__: Moment

您传递给 _.filter 的谓词函数应该 return true 如果要包含值但您的谓词:

function(n) {moment(n.date).isAfter(moment(timeCreated).subtract(110, 'days'))}

总是 returns undefined 因为它没有 return。 JavaScript 函数没有隐式 return 值,您必须明确:

function(n) {
    return moment(n.date).isAfter(moment(timeCreated).subtract(110, 'days'))
// -^^^^^^
}

此外,您正在尝试 _.filter 单个对象,而不是数组。在循环中你有:

var objects = arrayOfObjects[e];

然后你 _.filter(objects, ...) 这不会做任何有用的事情。

如果包含 return 语句并过滤数组:

_.filter(arrayOfObjects, function(n) {
    return moment(n.date).isAfter(moment(timeCreated).subtract(110, 'days'))
});

那应该没问题

演示:http://jsfiddle.net/ambiguous/p7uab8uj/

for (var e = 0; e < arrayOfObjects.length; e++) {
    var objects = arrayOfObjects[e];
    if (moment(objects.date).isAfter(moment(timeCreated).subtract(100, 'days'))) {
        var goodDates = [];
        goodDates.push(objects);
        console.log(goodDates);
    }
}