Dados de filtragem ng-repeat por intervalo de datas

Eu estou tentando filtrar uma lista que contém um timestamp, digitando um intervalo de datas

por exemplo:

JSFIDDLE

html

From: To:
{{order.date1 * 1000 | date:'dd-MM-yyyy'}} {{order.date2 * 1000 | date:'dd-MM-yyyy'}}

javascript

 var nameSpace = angular.module('tst',[]); nameSpace.controller('MyController', function MyController($scope) { $scope.orders = [ { "date1":"1306487800", "date2":"1406587800" }, { "date1":"1196487800", "date2":"1406597800" }] }); 

Eu quero ser capaz de preencher o campo “De” com o valor: 27-05-2010

e o campo “Para” o valor de: 29-07-2015

e obtenha apenas os registros que estão nesse intervalo.

(o primeiro registro no exemplo).

Obrigado colocar Avi

Você pode criar um filtro personalizado para atingir esse objective.

JSFIDDLE

html

    {{order.date1 * 1000 | date:'dd-MM-yyyy'}} {{order.date2 * 1000 | date:'dd-MM-yyyy'}}  

javascript

 function parseDate(input) { var parts = input.split('-'); return new Date(parts[2], parts[1]-1, parts[0]); } nameSpace.filter("myfilter", function() { return function(items, from, to) { var df = parseDate(from); var dt = parseDate(to); var result = []; for (var i=0; i df && tt < dt) { result.push(items[i]); } } return result; }; }); 

Além disso, mudei o tipo de dados timestamp de string para numbres.

  $scope.orders = [ { "date1": 1306487800, "date2": 1406587800 }, { "date1": 1196487800, "date2": 1406597800 }] 

Eu criei um filtro com momentJS para facilitar as coisas:

 .filter('dateRange', function() { return function(items, startDate, endDate) { var retArray = []; if (!startDate && !endDate) { return items; } angular.forEach(items, function(obj) { var receivedDate = obj.date; if (moment(receivedDate).isAfter(startDate) && moment(receivedDate).isBefore(endDate)) { retArray.push(obj); } }); return retArray; } }) 

Para manipulação de tempo, recomendo fortemente bibliotecas como momentJS; com momentJS e navegadores modernos, isso pode ser feito de uma maneira muito declarativa:

 .filter('dateRange', function() { return function(items, startDate, endDate) { //an undefined startDate is converted to the beginning of time startDate = startDate || 0; const granularity = null // can be 'days', ... see momentJS doc //you need support for array.prototype.filter and arrow functions; ie IE sucks/needs a polyfill return items.filter(item => moment(item).isBetween(startDate, endDate, granularity, '[]')); } }