Неисправность в данных таблицы фильтров между двумя выбранными датами с использованием angularjs

Я работаю над фильтром содержимого таблицы на основе двух выбранных дат. Он фильтрует дату, но результат неверен. dateRange Filter записывается в controller.

ProductionController

angular.module('app').controller('ProductionController', ['$scope','$state','ProductionService','FarmerRepository', function(scope,state,ProductionService,FarmerRepository) { fetchAllUsers(); function fetchAllUsers() { ProductionService.fetchAllUsers().then(function(d) { produceList = d; scope.produceList = produceList; }, function(errResponse) { console.error('Error while fetching produceList'); }); }; //this is custom filter .filter('dateRange', function() { return function(produceList, fromDate, toDate) { if(fromDate && toDate){ var filtered = []; angular.forEach(produceList, function(items) { if (items.produceDate > Date.parse(fromDate) && items.produceDate < Date.parse(toDate)) filtered.push(items); }); return filtered; } else return produceList; }}) 

view.html

        

Изменить: порядок скриптов

       

Пожалуйста, проверьте преобразованные даты value.produceDate при преобразовании в формат номера, который он не лежит между от и до date.hence здесь фильтрация не происходит.

 angular.module('app', ['720kb.datepicker']).controller('MyController', function ($scope) { var formatStr = 'DD/MM/YYYY'; $scope.from_date = moment("2017-05-02").format(formatStr); $scope.to_date = moment("2017-05-10").format(formatStr); $scope.produceList = [{ "itemName": "Mango", "produceDate": 1493360722000, "produceId": 90 }, { "itemName": "Banana", "produceDate": 1493290754000, "produceId": 89 }, { "itemName": "Grapes", "lastDateForBid": 1493510400000, "produceDate": 1493099760000, "produceId": 83 }, { "itemName": "Apple", "produceDate": 1490615680000, "produceId": 66 }, { "itemName": "Grapes", "produceDate": 1490615515000, "produceId": 65 }] }) .filter('dateRange', function() { var formatStr = 'DD/MM/YYYY'; return function(produceList, fromDate, toDate) { if(fromDate && toDate){ var filtered = []; angular.forEach(produceList, function(items) { if (items.produceDate > Date.parse(moment(fromDate, formatStr)) && items.produceDate < Date.parse(moment(toDate, formatStr))) filtered.push(items); }); return filtered; } else return produceList; }}) 
     
fromDate:
toDate:
search:
  • {{item | json}}

Я внес некоторые изменения в ваш .filter и использовал эту директиву .filter :

 angular.module('app', ['720kb.datepicker']).controller('MyController', function ($scope) { $scope.from_date = '02/05/2017'; $scope.to_date = '10/05/2017'; $scope.produceList = [ {itemName:'Tom', produceDate: Date.parse(new Date(2017, 5, 9))}, {itemName:'Sam', produceDate: Date.parse(new Date(2017, 5, 10))}, {itemName:'Paul', produceDate: Date.parse(new Date(2017, 5, 11))}, {itemName:'Henry', produceDate: Date.parse(new Date(2017, 5, 12))}, ] }).filter('dateRange', function() { var fromStr2Date = function(date){ var days = +date.substr(0, 2); var month = +date.substr(3, 2); var year = +date.substr(6, 4); return new Date(year, month, days); } return function(produceList, fromDate, toDate) { if(fromDate && toDate){ var filtered = []; angular.forEach(produceList, function(items) { if (items.produceDate > Date.parse(fromStr2Date(fromDate)) && items.produceDate < Date.parse(fromStr2Date(toDate))) filtered.push(items); }); return filtered; } else return produceList; }}) 
    
fromDate:
toDate:
search:
  • {{item | json}}

Вот ваше требуемое решение. Я тоже использовал момент js, но использовал довольно простой подход, сравнивая времена epoch в соответствии с данными, данными вами.

 < !DOCTYPE html>       
fromDate:
toDate:
search:
  • {{item | json}}