使用 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'))
});
那应该没问题
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);
}
}
我正在尝试按每个对象中的日期键过滤对象数组。
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'))
});
那应该没问题
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);
}
}