2016-05-12 45 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; 
};