суммирование разницы во времени в массиве json приложения angularjs идет не так

0

У меня есть следующий массив объектов json и функция, чтобы получить общее количество часов.

$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);
    }

так что я могу проверить

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

Несмотря на то что вручную мы можем ясно видеть, что разница в таймингах складывается до 24 часов, но функция не дает этого результата. Может ли кто-нибудь помочь мне решить проблему?

2 ответа

1
Лучший ответ

вы используете формат 24hrs, затем попробуйте это,

$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;
    }
1

Я думаю, что ваша проблема заключается в том, как вы обрабатываете свои временные различия. Для строки [1] ваше время окончания до вашего времени начала. Поэтому для этого вам нужно добавить 24 часа. Вот некоторая обновленная логика для вашего цикла:

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;

Вот простой рабочий пример. https://jsfiddle.net/L4oq1p85/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню