2016-10-17 2 views
-1

Я работаю в угловых js, и мои данные поступают из api в json array. Мне нужно добавить фильтр в соответствии с выбранным диапазоном дат из календаря. Мои даты поступают в двух полях «от» и «до» или могут быть одной датой, и мне нужно показывать записи в соответствии с датой истечения срока действия в json.Angular Js Как фильтровать записи по дате?

если пользователь выбирает диапазон дат и нажимает на поиск, тогда мне нужно получить выбранные записи. Это мой js в файле контроллера.

localStorageService.set('usersOpen', users.openUsers); 
localStorageService.bind($scope, 'usersOpen'); 

users.myUsers = myUsers; 
     function myUsers(start_date,end_date){ 
      DataService.myOpenUsers() 
       .then(function successCallback(response) { 
       $scope.usersOpen.length = 0; 
       $scope.usersOpen.push({'data': response.data.results}); 
      }, function errorCallback(response) { 

      }); 

Это формат json, который необходимо фильтровать.

{ 
    "results": [{ 
    "id": "999896", 
    "description": "Description Testingggg", 
    "picturesUrl": [], 
    "assigID": [{ 
     "userId": "67767776", 
     "email": "[email protected]", 
     "firstName": "test", 
     "lastName": "User", 
     "pictureUrl": "", 
     "notifyStatus": "None", 

    }], 
    "expiryDate": "2016-10-14T17:48:50.100Z", 
    "createdUserId": "8887900", 
    "status": "Open", 
    "dtModified": "2016-10-14T12:21:27.431Z" 
    },{ 
    "id": "999897", 
    "description": "New Tested Description", 
    "picturesUrl": [], 
    "assignedTo": [{ 
     "userId": "887997", 
     "email": null, 
     "firstName": "testing", 
     "lastName": "users2", 
     "pictureUrl": null, 
     "notifyStatus": "None", 
     "devices": [] 
    }, { 
     "userId": "887997", 
     "email": "[email protected]", 
     "firstName": "Testing", 
     "lastName": "User2", 
     "pictureUrl": "", 
     "notifyStatus": "None", 

    }], 
    "expiryDate": "2016-10-11T09:46:09.100Z", 
    "createdUserId": "887997", 
    "status": "Open", 
    "location": { 
     "lat": 12.1, 
     "lon": -3.1 
    }, 
    "dtModified": "2016-10-11T09:36:30.217Z" 
    }] 
} 

Это html, где я получаю записи.

<ul>       
<li ng-repeat="users in usersOpen[0].data track by $index" class="{{users.status}} {{yit.id}}">       
<div class="content-box"> 
<div class="text-box"> 
{{users.description}} 
</div> 
{{users.expiryDate}}  
</div> 
{{users.firstName}} 
</li> 
</ul> 

ответ

-2

для вашей проблемы, вы можете использовать родной Javascript фильтр:

response.data.results.filter(function(user){ 
    return //add your date test here on user.expiryDate 
} 
1

Вы можете создать собственный фильтр для дат фильтрации диапазона, как это,

Фильтр

app.filter('dateFilter', function() { 
     return function(input, start, end) { 
     var inputDate = new Date(input), 
      startDate = new Date(start), 
      endDate = new Date(end), 
      result = []; 

     for (var i = 0, len = input.length; i < len; i++) { 
      inputDate = new Date(input[i].DepartureDateTime); 
      if (startDate < inputDate && inputDate < endDate) { 
      result.push(input[i]); 
      } 
     } 
     return result; 
     }; 
    }); 

и применять в HTML

<div ng-controller="MyController"> 
     <div ng-repeat="data in Combination | dateFilter:startDate:endDate "> 
      <div >{{data.DepartureDateTime}}</div> 
     </div> 
</div> 

DEMO

+0

Предлагайте используя момент для даты разбора, так как он более последователен во всех браузерах. Также не вводится массив? почему он преобразуется в дату? кроме того, это соответствует тому, что я написал в ответ. – shaunhusain

+0

, откуда идет переменная комбинации. Это не фильтр. –

+0

не могли бы вы рассказать мне, где я могу добавить это в свой код? –

0

Вы можете использовать angularjs $ фильтр, вам нужно впрыснуть $ фильтра в контроллере и фильтра в любом формате вы хотели.

$filter('date')(new Date(expiryDate), "M/d/yyyy"); 

для получения пользовательских данных в диапазоне 2 даты, используйте этот код

var fromTime = new Date("2015-04-23").getTime(); 
var toTime = new Date("2015-04-28").getTime(); 

var filteredDataByDates = []; 
var row, date; 

for (i in data) { 

    row = data[i]; 
    date = new Date(row[4]); 

    if (date.getTime() >= fromTime && date.getTime() <= toTime) { 
    filteredDataByDates.push(row); 
    } 
} 
+0

Этот фильтр изменит формат даты. Как я могу получить записи между выбранным диапазоном дат пользователя? –

+0

обновил ответ – AhammadaliPK

+0

Мне нужно в каждом массиве «filterDataByDates» поместить все строки по одному, либо он будет фильтровать полный массив. –

Смежные вопросы