Используя AngularJS, я хочу сравнить, если дата превышает 3 дня с сегодняшнего дня:

Контроллер:

 $scope.todayDate = new Date();

И dateHire из объекта json, например dateHire ":" 2016-02-08T00: 00: 00 "

Html:

<tr ng-repeat ="emp in Employees">
     <td>
          <span class="label label-danger" ng-class="{'label-danger': (((todayDate | date:'d M') - (emp.dateHire | date: 'd M')) > 3)}"> {{emp.name}}</span>
         </td>
</tr>

Однако это не работает. Что я делаю неправильно.

1
BumbleBee 12 Май 2016 в 21:13

2 ответа

Лучший ответ

Создайте фильтр:

app.filter('unixDate',function(){
  return function(date) {  
    return new Date(date).getTime();
  }
});

Затем используйте его в своем объекте ng-class:

ng-class="{'label-danger': (todayDate | unixDate) - (emp.dateHire | unixDate) > 86400000 * 3}"
1
dewd 12 Май 2016 в 20:34

Не следует добавлять в представление логику JS. Вы пытаетесь применить фильтры к своей дате: emp.dateHire | date: 'd M', в результате получается строка, а затем вы пытаетесь вычесть две строки. В итоге вы делаете что-то вроде '12 May' - '10 May', и в результате получается NaN.

Вам нужно добавить функцию в свой контроллер или область, которая принимает объект сотрудника, затем анализирует значение employee.dateHire в объект Date и, наконец, возвращает результат сравнения этой даты с текущей датой.

Что-то вроде следующее:

this.hireDateGreaterThanDays = function(emp, days) {
    var now = new Date();

    var dateHire = /* create a new date from the emp.dateHire attribute */

    /**
     * Compare date values here. Can use a library like MomentJS or
     * plain JS Date objects as pointed out in other answers and comments.
     */
    return (now - dateHire) > 3;
};
1
rvignacio 12 Май 2016 в 18:44