riassumendo la differenza di timing in json arrays di applicazione angularjs sta andando a sbagliare

Ho la seguente serie di oggetti json e function per get il totale count ore.

$scope.workingHrsList = [ { "uniqueStartTime": "4.00", //4 AM "uniqueEndTime": "16.45" //4.45 PM }, { "uniqueStartTime": "16.45", //4.45 PM "uniqueEndTime": "3.15" // 3.15 AM }, { "uniqueStartTime": "3.15", //3.15 AM "uniqueEndTime": "4.00" // 4.00 AM } ]; var toatlWorkingHrsCnt = getTotalHoursCount(); function getTotalHoursCount() { var totalHrs = 0.0; for (var i = 0; i < $scope.workingHrsList .length; i++) { totalHrs = totalHrs + (parseFloat($scope.workingHrsList [i]["uniqueEndTime"]) - parseFloat($scope.workingHrsList [i]["uniqueStartTime"])); $scope.workingHrsList [i]["diffHrs"] = (parseFloat($scope.workingHrsList [i]["uniqueEndTime"]) - parseFloat($scope.workingHrsList [i]["uniqueStartTime"])) + ""; console.log("End : " + parseFloat($scope.workingHrsList [i]["uniqueEndTime"])); console.log("Start : " + parseFloat($scope.workingHrsList [i]["uniqueStartTime"])); console.log("Row Hrs with Index " + i + " : " + totalHrs); } console.log("Total Hours : " + totalHrs); return (totalHrs); } 

in modo da poter controllare

 if(toatlWorkingHrsCnt == "24.00" ) { console.log("Payable"); } else { console.log("Not Payable"); } 

Anche se manualmente, possiamo vedere chiaramente che la differenza nei tempi è aumentare fino a 24 ore, ma la function non sta dando questo risultato. Qualcuno può aiutarmi a risolvere il problema?

si utilizza il formato 24 ore, quindi prova questo,

 $scope.workingHrsList = [ { "uniqueStartTime": "4.00", //4 AM "uniqueEndTime": "16.45" //4.45 PM }, { "uniqueStartTime": "16.45", //4.45 PM "uniqueEndTime": "3.15" // 3.15 AM }, { "uniqueStartTime": "3.15", //3.15 AM "uniqueEndTime": "4.00" // 4.00 AM } ]; function getTotalHoursCount() { var totalHrs = 0, uEndTime = 0, uStartTime = 0, diff = 0; for (var i = 0; i < $scope.workingHrsList .length; i++) { uEndTime = parseFloat($scope.workingHrsList[i].uniqueEndTime); uStartTime = parseFloat($scope.workingHrsList[i].uniqueStartTime); //always start greater than end time if not //it means they worked continued for next day, //so we need to 24 hrs with end time if(uEndTime > uStartTime){ diff = uEndTime - uStartTime; } else{ diff = (uEndTime + 24) - uStartTime; } totalHrs += diff; $scope.workingHrsList[i].diffHrs = diff; console.log("End : " + uEndTime); console.log("Start : " + uStartTime); console.log("Row Hrs with Index " + i + " : " + totalHrs); } console.log("Total Hours : " + totalHrs); return totalHrs; } 

Penso che il tuo problema sia il modo in cui gestisci le tue differenze di tempo. Per la row [1] il tempo di fine è prima della data di inizio. Quindi bisogna aggiungere 24 ore per farne conto. Ecco alcune logiche aggiornate per il tuo ciclo:

 var row = workingHrsList[i]; var endTime = parseFloat(row["uniqueEndTime"]); var startTime = parseFloat(row["uniqueStartTime"]) var diff = endTime - startTime; if(diff < 0) { diff += 24; console.log("24 hours added"); } totalHrs += diff; 

Ecco un semplice esempio di lavoro. https://jsfiddle.net/L4oq1p85/