ChrisM
ChrisM

Reputation: 716

Angular ng-repeat - limit results to timeframe

I have the following Model and would like to display the top voted over the last 24 hours

    {
    "_id": {
        "$oid": "56abe20fabd3fa64187b5d21"
    },
    "user": {
        "$oid": "56a1832a36dc3d0e00c7aa3f"
    },
    "title": "Intel Pentium i5 Quad-Core i5-6400",
    "created": {
        "$date": "2016-01-29T22:05:03.574Z"
    },
    "votes": 1
}

So basically limiting the ng-repeat to the created field within the last 24 hours.

Filter

angular.module('savings').filter('lessThan', function () {
    return function(savings, requirement) {
        var filterKey = Object.keys(requirement)[0];
        var filterVal = requirement[filterKey];



        var filtered = [];


        if(filterVal !== undefined && filterVal !== ''){
            angular.forEach(savings, function(saving) {
                var today = new Date();

                var date = new Date(saving.created.$date);

                var diff = today - date;

                diff = diff / (1000*60*60);

                if(diff < filterVal) {
                    filtered.push(saving);
                }
            });
            alert(filtered.length);
            return filtered;



}

    return savings;

};

});

Ive tried implement the answer below but it doesnt return any results.

Screenshot of resource.

enter image description here

Upvotes: 1

Views: 315

Answers (1)

Brian Baker
Brian Baker

Reputation: 996

I'll save you some time.. here is your filter.

app.filter('lessThan', function () {
 return function(items, requirement) { 
  var filterKey = Object.keys(requirement)[0];
  var filterVal = requirement[filterKey];    

  var filtered = [];    

  if(filterVal !== undefined && filterVal !== ''){      
    angular.forEach(items, function(item) {
      var today = new Date();
      var date = new Date(item.created)
      var diff = today - date;
      diff = diff / (1000*60*60)

      if(diff < filterVal) {
        filtered.push(item);
      }
    });
    return filtered; 
  }        

  return items;
  };
 });

And call it like:

<div ng-repeat="item in items | lessThan: {'created':24}">

Here is a plunker.

EDIT: Based on the screenshot created property looks more like this:

"created": "2016-01-29T22:05:03.574Z"   

I've edited the filter for this model

Upvotes: 2

Related Questions