2014-10-02 133 views
1

我有一個我正在建設的網站上的事件列表,我希望過去的事件被自動刪除。我已經寫了一個過濾器來做這件事,除了它也刪除了今天的事件。我正在嘗試使用Angular Moment。這裏是我的代碼:AngularJS過濾帖子的日期不顯示今天的日期

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

我想你只需要改變「小時」到「天」,但你真的應該只需要聲明的currentdate一旦 – JoseM 2014-10-02 20:43:47

回答

1

最好是創建一個您要測試的截止點moment。 Moments api爲您提供了一種使用.startOf('day')的簡單方法。這會給你一個moment,代表今天上午12:00(當天的第一秒)。但是,由於您也希望將該值包含在過濾器中,因此可以在距離該值1毫秒處輸入subtract

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

+0

感謝你,因爲工作這麼好! – Margaret 2014-10-03 00:32:53