У меня есть скрипт, который будет принимать список задач, проверять частоту проверки (ежедневно, еженедельно, раз в два года, смена часов (летнее время)) и заполнять журнал этими проверками, если проверка должна быть завершена .
В настоящее время это работает для ежедневных и еженедельных задач, потому что это просто сравнение двух дат и добавление 1,7, но мне нужно иметь возможность добавить чек, который добавляется в журнал непосредственно перед тем, как произойдут изменения часов, чтобы соответствующие Команда может завершить проверку.
Я считаю, что главная проблема в том, что я просто сравниваю разницу в датах.
Вот мой текущий код ... если это не имеет смысла, пожалуйста, спросите!
function fillTasksLog(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var Settingss = ss.getSheetByName('Settings')
var teamList = Settingss.getRange("A2:C").getValues();
for(var team in teamList){
if(teamList[team][0] != ""){
var WMsheet = ss.getSheetByName(teamList[team][0])
var WMSheetLog = ss.getSheetByName('Log')
var taskList = WMsheet.getRange("A4:I").getValues();
var taskLog = WMSheetLog.getRange("A4:Q").getValues();
var nextFreeRow = WMSheetLog.getLastRow()+1
var count = 0;
for (var task in taskList){
var latestDate = new Date("2017-01-21T20:23:26+0000");
var existingTaskFound = false;
for(var loggedTask in taskLog){
var uniqueLogID = taskLog[loggedTask][13];
var uniqueTaskListID = taskList[task][8];
var uniqueLogDate = taskLog[loggedTask][9];
var checkFrequencyDays = 0;
switch(taskList[task][0]){// looks for date type (frequency)of item in log and assigns value
//ADD WEEKDAYS TO SWITCH
case "Daily" :
//Logger.log("INSIDE SWITCH DAILY: ");
checkFrequencyDays=1;
break;
case "Weekly" :
//Logger.log("INSIDE SWITCH WEEKLY: ");
checkFrequencyDays=7;
break;
case "Monthly" :
//Logger.log("INSIDE SWITCH Monthly: ");
checkFrequencyDays=30.5;
break;
case "Quarterly" :
//Logger.log("INSIDE SWITCH QUARTERLY: ");
checkFrequencyDays=91.25;
break;
case "Bi-annually" :
//Logger.log("INSIDE SWITCH BI-ANNUALLY: ");
checkFrequencyDays=182.5;
break;
case "Annually" :
//Logger.log("INSIDE SWITCH ANNUALLY: ");
checkFrequencyDays=365;
break;
default :
//Logger.log("INSIDE SWITCH DEFAULT: ");
checkFrequencyDays=1;
break;
}
if(uniqueLogID == uniqueTaskListID){
existingTaskFound = true;
//Logger.log("checkFrequencyDays: "+checkFrequencyDays);
//Logger.log("LATEST"+latestDate);
//Logger.log(taskLog[loggedTask][16]);
if(latestDate < taskLog[loggedTask][14]){
latestDate = taskLog[loggedTask][14];
if(taskLog[loggedTask][10] == ""){
WMSheetLog.getRange('K' + (parseInt(loggedTask) + 4)).setValue("No");
}
}
}
}
if(existingTaskFound){
var dt1 = new Date(); // today's date
var dt2 = latestDate;
// get milliseconds
var t1 = dt1.getTime();
var t2 = dt2.getTime();
var diffInDays = Math.floor((t1-t2)/(24*3600*1000));
// 24*3600*1000 is milliseconds in a day
//Logger.log("DIFFINDAYS: "+diffInDays);
if(diffInDays >= checkFrequencyDays){
addTaskToLog(WMSheetLog, nextFreeRow, count,taskList, task, teamList[team][0], teamList[team][1]);
count ++;
}
}else{
addTaskToLog(WMSheetLog, nextFreeRow, count,taskList, task, teamList[team][0], teamList[team][1]);
count ++;
}
}
}
}
}
function addTaskToLog(WMSheetLog, nextFreeRow, count,taskList, task, teamName, teamType){
var todaysDate = new Date();
WMSheetLog.getRange('A' + (nextFreeRow + count)).setValue(taskList[task][0]);
WMSheetLog.getRange('B' + (nextFreeRow + count)).setValue(taskList[task][1]);
WMSheetLog.getRange('C' + (nextFreeRow + count)).setValue(taskList[task][2]);
WMSheetLog.getRange('D' + (nextFreeRow + count)).setValue(taskList[task][3]);
WMSheetLog.getRange('E' + (nextFreeRow + count)).setValue(taskList[task][4]);
WMSheetLog.getRange('F' + (nextFreeRow + count)).setValue(taskList[task][5]);
WMSheetLog.getRange('G' + (nextFreeRow + count)).setValue(taskList[task][6]);
WMSheetLog.getRange('H' + (nextFreeRow + count)).setValue(taskList[task][7]);
WMSheetLog.getRange('N' + (nextFreeRow + count)).setValue(taskList[task][8]);
WMSheetLog.getRange('O' + (nextFreeRow + count)).setValue(todaysDate);
WMSheetLog.getRange('P' + (nextFreeRow + count)).setValue(teamName);
WMSheetLog.getRange('Q' + (nextFreeRow + count)).setValue(teamType);
}
Обновлен вопрос 13 января:
Ожидаемым результатом будет то, что если у кого-то есть задача, которую необходимо выполнить до смены часов (возможно, даже за две недели до этого), задача будет добавлена в журнал на соответствующую дату. например, в этом году часы меняются в воскресенье, 31 марта ... Я бы хотел, чтобы это задание было добавлено в журнал за две недели до этого, чтобы команда знала, что им нужно выполнить задание. На данный момент сценарий не знает даты смены часов и просто ссылается на простой расчет, т. Е. Каждые 6 месяцев равны 182,5 дням
Это то же самое с двухлетними заданиями
Обновление изображений 14 января:
Страница для команды, чтобы обновить их список задач (Лист с названием команды)
Страница настроек с информацией о команде
Основной журнал, заполняемый списком задач каждой команды
Еще одна функция, которая мне нужна, - это если нужно выполнить проверку в определенный день в период, когда сценарий может это понять.