2016-05-12 43 views
1

使用AngularJS我想比较,如果日期是从今天大于3日:检查3天是否已过。 AngularJS

控制器:

$scope.todayDate = new Date(); 

dateHire从像dateHire JSON对象 “:” 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> 

但是,它不工作,我究竟做错了

+0

是'emp.dateHire'通过什么格式的?如果你可以将它作为一个Unix数字来执行,你可以执行'new Date()。getTime() - emp.dateHire>(86400000 * 3)' – dewd

+0

dateHire“:”2016-02-08T00:00:00“ – BumbleBee

回答

1

创建一个过滤器:

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

然后在NG-类对象使用它:

ng-class="{'label-danger': (todayDate | unixDate) - (emp.dateHire | unixDate) > 86400000 * 3}" 
+1

Setting $ scope.emp.dateHire不会工作,因为他在ng-repeat循环中,所以最好把这个逻辑放在一个可以从视图中调用的函数中。 – rvignacio

+0

@rvignacio好点。修改为ng-repeat – dewd

+0

我得到了后续错误:错误:$ parse:syntax 语法错误 语法错误:Token'Date'是意外的,期望[]]在表达式[{'label-danger':todayDate - (new Date(emp.dateHire))>(86400000 * 15))}]从[Date(emp.dateHire))开始(86400000 * 15))}]。 – BumbleBee

1

您应该将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; 
};