Я пытаюсь создать систему посещаемости, которая рассчитывает задержки на основе определенных критериев. Во-первых, у каждого учащегося есть строка, посвященная ему, в электронной таблице. (Ie, посещаемость студента 1 находится в строке 3, посещаемость студента 2 - в строке 4 и т. Д. c.). Каждый студент имеет личную информацию в первых нескольких столбцах. Затем у каждого студента есть запись о посещении собрания. Вся информация о посещаемости представлена парами с указанием времени входа и выхода.
Студент получает опоздание, если он появляется после 18:30. Они также получают опоздание, если они присутствуют менее 2 часов. Поэтому я написал код для расчета количества запозданий.
/**
each student has one row dedicated to their attendance. Sign in and sign out are always in pairs. I will ensure that the range
begins with range[0][0] being the first sign in time.
@param range the row for the student's attendance
@return the total tardies for each student
**/
function calculateTardies(range){
var search = range[0].length;
var tardies = 0;//initially set to 0
for(k = 0; k<search; k+2){ //go through the entire row of the student's sign in and sign out times (k+2 because they always come in pairs)
var timeIn = new Date(range[0][k]); //sign in time will always be at a K value
var date = Utilities.formatDate(timeIn, "EST", "EEE"); //get the day of week that time stamp is
var timeOut = new Date(range[0][k+1]); //sign out time is to the right of the sign in time
if(date == "Tue" || date == "Wed" || date == "Thu"){ //they only need to be there for 2 hours Tues-Thurs
var checkHour = Number(Utilities.formatDate(timeIn, "EST", "HH")); //The hour student arrived
var checkMin = Number(Utilities.formatDate(timeIn, "EST", "mm")); //The minute student arrived
var outHour = Number(Utilities.formatDate(timeOut, "EST", "HH")); //hour student left
var outHour = Number(Utilities.formatDate(timeOut, "EST", "HH")); // min student left
//If the student wasn't present for at least 2 hours, add a tardy
if((checkHour+2)*60+checkMin < (outHour*60)+outMin){
tardies = tardies+1;
}
//if the student left before 6:30 PM, add a tardy
if((checkHour*60)+checkMin > 1830){ //11100 is 6:30 PM in minutes 6PM=> 18 hours * 60 min = 1080 minutes + 30 additional minutes
tardies = tardies+1;
}
}
}
return tardies;
}
Чтобы проверить, находятся ли они там в течение двух часов, мне пришлось изменить метки времени на минуты. Я обнаружил, что не могу просто сравнить время как есть. То же самое относится и к тому, почему я изменил время прибытия на минуты, прежде чем сравнивать его с 18:30.
Я столкнулся с ошибкой, состояние которой превысило максимальное время выполнения (строка 0). Любой совет, как я могу изменить код или исправить эту ошибку, будет принята с благодарностью.