У меня есть следующий массив объектов 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 часов, но функция не дает этого результата. Может ли кто-нибудь помочь мне решить проблему?
вы используете формат 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] ваше время окончания до вашего времени начала. Поэтому для этого вам нужно добавить 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/