我已经在我建立的网站上获得了一系列活动,我希望自动删除过去的活动。我写了一个过滤器就是这样做的,除了它正在删除今天的事件。我试图使用Angular Moment。这是我的代码:
angular.module('zenCityApp')
.filter('filterPastDates', function (moment) {
return function (events) {
var filterByDate = [];
for (var i = 0; i < events.length; i++) {
var currentDate = new Date();
if(moment(currentDate).isBefore(events[i].date, 'hour')) {
console.log("we're in!");
filterByDate.push(events[i]);
console.log(filterByDate);
}
}
return filterByDate;
};
});
这是标记:
div ng-repeat="event in events | limitTo:100 | filter:tfilter | orderBy: 'date' | filterPastDates">
<div class="row">
<div class="col-md-6">
<h4>{{event.date | amDateFormat:'MMMM Do'}}</h4>
</div>
<div class="col-md-6">
<h4>{{event.name}}</h4>
</div>
</div>
非常感谢任何帮助。
答案 0 :(得分:1)
最好是创建一个您想要测试的截止moment
。通过使用.startOf('day')
,时刻api为您提供了一种非常简单的方法。这将为您提供moment
代表今天上午12:00(当天的第一秒)。但是,由于您还希望在过滤器中包含该值,因此可以subtract
距离值1毫秒。
var cutOffDate = moment().startOf('day').subtract(1,'millisecond');
现在您可以轻松地在过滤器中使用它。请注意,我在循环之外创建了该对象(因为它不应该更改),我直接创建它,而不是每次在循环中创建一个新的矩形对象。
app.filter('filterPastDates', function () {
return function (events) {
if (events && events.length) {
var filtered = [];
var cutOffDate = moment().startOf('day').subtract(1,'millisecond');
for (var i = 0; i < events.length; i++) {
var evt = events[i];
if (cutOffDate.isBefore(evt.date)) {
filtered.push(evt);
}
}
return filtered;
} else {
return events;
}
};
});
这里是一个样本plunker:http://plnkr.co/edit/kSXu0Z3J7zoyBMBjoE84?p=preview