В качестве одного из нескольких методов, если вы хотите использовать один триггер для everyDays
, как насчет следующего измененного сценария?
В этой модификации поток выглядит следующим образом.
Поток:
createDayTrigger
установлен как триггер everyDays
, который работает около "21:00". - Функция
startScript()
должна запускаться только один раз. После запуска этой функции автоматически запускается управляемый по времени триггер.
- При запуске
createDayTrigger
функции TimeTrigger1
и TimeTrigger2
устанавливаются в качестве триггераat
, которые запускаются в «22:00» и «00:01». - Когда выполняется
TimeTrigger1
, запускается функция TimeTrigger
и триггер TimeTrigger1
очищается. - Когда выполняется
TimeTrigger2
, запускается функция TimeTrigger
и очищается триггер TimeTrigger2
.
В этом цикле функция TimeTrigger
можетбыть запущенным TimeTrigger1
и TimeTrigger2
в "22:00" и "00:01".
Модифицированный скрипт:
function TimeTrigger(functionName) {
deleteTrigger(functionName);
// Script writes two timestamps in cells A2 and A3.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Tickerprüfung');
sheet.getRange('A2').setValue(new Date());
var date = new Date();
date.setHours(22);
date.setMinutes(0);
date.setSeconds(0);
date.setMilliseconds(0);
sheet.getRange('A3').setValue(date);
var date1 = new Date();
date1.setHours(23);
date1.setMinutes(59);
date1.setSeconds(59);
date1.setMilliseconds(00);
sheet.getRange('A4').setValue(date1);
}
function TimeTrigger1() {TimeTrigger("TimeTrigger1")}
function TimeTrigger2() {TimeTrigger("TimeTrigger2")}
function deleteTrigger(functionName) {
var triggers = ScriptApp.getProjectTriggers();
triggers.forEach(function(t) {
if (t.getHandlerFunction() == functionName) ScriptApp.deleteTrigger(t);
});
}
function createDayTrigger() {
var d1 = new Date();
d1.setHours(22);
d1.setMinutes(0);
d1.setSeconds(0);
ScriptApp.newTrigger('TimeTrigger1').timeBased().at(d1).create();
var d2 = new Date();
d2.setDate(d2.getDate() + 1);
d2.setHours(0);
d2.setMinutes(1); // Do you want to run at "00:01"?
d2.setSeconds(0);
ScriptApp.newTrigger('TimeTrigger2').timeBased().at(d2).create();
}
// This function has to be started once to get "createDayTrigger()" started.
function startScript() {
ScriptApp.newTrigger('createDayTrigger').timeBased().everyDays(1).atHour(21).create();
}
Примечание:
- Если вы хотите установить триггер на «00:01», в вашем случае необходимо добавить
d2.setDate(d2.getDate() + 1);
. Потому что, когда триггер установлен, «00:01» - это завтра.
Редактировать 1:
Из вашего ответа на комментарий и обновленного вопроса я могу понять, что вы хотите установитьВремя срабатывания до 00:00 и 22:00 того же дня. В приведенном выше ответе 1-й и 2-й триггеры - это 22:00 сегодня и 00:00 завтра. Но этот цикл продолжается триггером, установленным с createDayTrigger
. Таким образом, после следующего цикла запускаются 00:00 и 22:00 того же дня. Но, похоже, это бесполезно. Поэтому я предложил модифицированный скрипт. Измените приведенный выше сценарий следующим образом.
function createDayTrigger() {
var d1 = new Date();
d1.setDate(d1.getDate() + 1); // <--- Added
d1.setHours(22);
d1.setMinutes(0);
d1.setSeconds(0);
ScriptApp.newTrigger('TimeTrigger1').timeBased().at(d1).create();
var d2 = new Date();
d2.setDate(d2.getDate() + 1);
d2.setHours(0);
d2.setMinutes(1); // Do you want to run at "00:01"?
d2.setSeconds(0);
ScriptApp.newTrigger('TimeTrigger2').timeBased().at(d2).create();
}
- В соответствии с вышеуказанным изменением при запуске
createDayTrigger()
время запуска 00:00 и 22:00 устанавливается на один и тот же день.
Редактировать 2:
В вашем скрипте отражена моя последняя модификация, запускается следующий поток:
- При запуске
startScript()
, createDayTrigger
устанавливается на управляемый по времени триггер около 21:00 каждый день. - Эта функция запускается около «21:00» каждый день. Это также можно подтвердить в G Suite Developer Hub.
- Здесь, в качестве тестового примера, предполагается, что функция будет запущена в 21:00 2019-10-09.
- Когда
createDayTrigger()
запускается в 21:00 2019-10-09, TimeTrigger1
и TimeTrigger2
устанавливаются как управляемый по времени триггер в «22:00 2019-10-10» и «00:00 из 2019-10-10 ", соответственно. Когда TimeTrigger2
выполняется в" 00:00 из 2019-10-10 ", 00:00:00,22:00:00,23:59:59
помещаются в ячейки«A2: A4» листа Tickerprüfung
.
Это значения из вашего сценария.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Tickerprüfung');
sheet.getRange('A2').setValue(new Date());
var date = new Date();
date.setHours(22);
date.setMinutes(0);
date.setSeconds(0);
date.setMilliseconds(0);
sheet.getRange('A3').setValue(date);
var date1 = new Date();
date1.setHours(23);
date1.setMinutes(59);
date1.setSeconds(59);
date1.setMilliseconds(00);
sheet.getRange('A4').setValue(date1);
Когда TimeTrigger1
выполняется в «22:00 из 2019-10-10», 22:00:00,22:00:00,23:59:59
помещается в ячейки «A2: A4» листа Tickerprüfung
.
Этот поток текущего скрипта отразил мою модификацию в вашем вопросе.
В вашем вопросе вы хотите достичь функций TimeTrigger1
и TimeTrigger2
в 22:00 и00:00 того же дня. Об этом я могу подтвердить, что мое понимание верно на этот ответ . Я думаю, что этого можно достичь.