AngularJS筛选帖子按日期未显示今天的日期

时间:2014-10-02 20:06:57

标签: angularjs date filter momentjs

我已经在我建立的网站上获得了一系列活动,我希望自动删除过去的活动。我写了一个过滤器就是这样做的,除了它正在删除今天的事件。我试图使用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>

非常感谢任何帮助。

1 个答案:

答案 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