2015-11-04 38 views
0

我遍歷的日期列表(jobs.submitted):在AngularJS表達式計算功能

<div ng-controller="DashboardController as dashboard"> 


<div ng-repeat="job in dashboard.jobs | filter: {status: 'started'}" class="row"> 
    <div class="col-xs-3">{{job.submitted}}</div> 
</div> 

現在我想計算的持續時間:

(new Date(job.submitted)) - (new Date(job.completed)) 

如果我直接把這個到表達式我得到一個語法錯誤(我猜angularJS不明白日期對象)。

如果我把它改成一個函數,該函數在控制器,功能從不計算:

{{dashboard.getDuration(job)}} 

是空白。

解決此問題的最佳方法是什麼?

+0

你加'getDuration'作爲你的'jobs'對象的屬性?或者它在你的控制器上? 「儀表板」是你的控制器嗎?我們需要更多信息。 – JLRishe

+0

如果提供了jsfiddle,幫助你真的更容易。你有沒有試過把'Date'放入'$ scope'('$ scope.Date = Date'),或者只是'{{jobs.getDuration(job)}}'(假設你做了'this.jobs.getDuration = function。 ..')? –

+0

'dashboard.jobs'似乎是一個數組,在那裏沒有函數'getDuration'。因此,看起來您需要將getDuration添加到'$ scope'或您的控制器中的'this'中,然後使用controller As語法。 –

回答

1

嘗試這樣

$scope.getDays=function getDays(toDate, fromDate, isNegetiveAllowed) { 
    toDate=new Date(toDate); 
    fromDate=new Date(fromDate); 
    return Math.round((toDate - fromDate)/(1000 * 60 * 60 * 24)); 
}; 

HTML

<div ng-repeat="job in dashboard.jobs | filter: {status: 'started'}" class="row"> 
    <div class="col-xs-3">{{ getDays(job.completed,job.submitted) }}</div> 
</div> 
+0

謝謝,我沒有通過_this_公開函數(我沒有使用$ scope - https://github.com/johnpapa/angular -styleguide#風格y031)。愚蠢的錯誤。 –

0

這應該在控制器不能在視圖中完成。 你可以試試這個方法:

鑑於:

{{getJobDiiff(作業)}}

在控制器:

$scope.getJobDiiff= function(job){ 
//chage dates in timestamp 
var timestamp1 = new Date(job.submitted).getTime(); 
var timestamp2 = new Date(job.completed)).getTime(); 
var diff = timestamp1 - timestamp2; 
var newDate = new Date (diff); 
return newDate; 

}

0

Here is one way

var date1 = new Date("7/11/2010"); 
var date2 = new Date("12/12/2010"); 
var timeDiff = Math.abs(date2.getTime() - date1.getTime()); 
var diffDays = Math.ceil(timeDiff/(1000 * 3600 * 24)); 
alert(diffDays);