Угловой фильтр диапазона дат

Мне было интересно, может ли кто-нибудь помочь мне. В настоящее время я пытаюсь заставить фильтр даты работать в Angular. Я мог бы говорить об этом совершенно неправильно, но просто подумал, что спрошу.

В настоящее время у меня есть ng-repeat, перебирающий массив объектов. В моих объектах есть следующие поля: title, sendBy и recevied. Получено в формате UTC, и мой фильтр в основном принимает два входа также в формате utc для даты начала и окончания. Затем фильтр проверяет, является ли полученное значение больше или равно начальной дате или меньше или равно конечной дате. Моя проблема в том, что вход в фильтр - это вход всего объекта. Я не уверен, как получить доступ к полученному полю объекта в фильтре, чтобы выполнить сравнение. Я попробовал input.received, но это не сработало. вот пример моего кода.

.filter('dateRange', function(){

return function(input, startDate, endDate) {

    if(input.received >= startDate && input <= endDate){
        return input;
    }

};

})

Как я уже сказал, я мог бы сделать это совершенно неправильно, но любая помощь будет принята с благодарностью.

редактировать: мой html-код так же прост, как показано ниже:

    <div ng-repeat="message in messages | dateRange: startDate : endDate " >

person J145    schedule 26.09.2014    source источник
comment
Пожалуйста, предоставьте больше кода: вы должны добавить HTML, в котором вы передаете фильтр, к элементам.   -  person Bolza    schedule 26.09.2014


Ответы (2)


Попробуйте код ниже. Вам нужно сравнить время.

.filter('dateRange', function(){

    return function(input, startDate, endDate) {
       angular.forEach(input, function(obj){

        if(obj.received.getTime() >= startDate.getTime() && obj.received.getTime() <= endDate.getTime())   {
            return obj;
        }
       });

    };
});

<div ng-bind="messages | dateRange: startDate : endDate " ></div>
   or
<div> {{messages | dateRange: startDate : endDate }}</div>
person Subash Selvaraj    schedule 26.09.2014
comment
к сожалению, при попытке доступа к input.received я получаю сообщение об ошибке input.received is undefined, возможно, я делаю что-то глупое. Спасибо за ответ. Поскольку это массив объектов, мне нужно как-то получить индекс массива? - person J145; 26.09.2014
comment
Только что проверил, кажется, мне нужен индекс массива, теперь мне нужен какой-то метод увеличения или передачи индекса. Немного поиграю с ним и посмотрю, смогу ли я найти решение. Спасибо. - person J145; 26.09.2014
comment
Бах, похоже, не может понять, как передать соответствующий индекс массива через фильтр, есть предложения? - person J145; 26.09.2014

В вашем коде фильтр работает с массивом messages, это означает, что первый аргумент (input) — это массив, и возвращаемый тип тоже должен быть массивом. Посмотрите здесь.

Ваш код должен быть примерно таким:

 <div ng-repeat="message in messages | dateRange: startDate : endDate" >

Ваш фильтр:

.filter('dateRange', function() {
   return function(input, startDate, endDate) {

      var retArray = [];

      angular.forEach(input, function(obj){
        var receivedDate = obj.received;

        if(receivedDate >= startDate && receivedDate <= endDate) {
            retArray.push(obj);         
        }
      });

      return retArray;
   };
}); 

Вот плункер.

person s1moner3d    schedule 22.10.2015