虽然 TheMaster 的回答是正确的,但我想详细说明一种替代方法,它可能对未来的读者和不同的项目有用。
假设您有一个特定时间列表(24 小时:毫米),您希望每天安排:
var times = [[9,30],[9,45],[10,00],[12,00]] // 9:30 am, 9:45 am, 10:00 am 12:00pm
可以完全随机,按照你喜欢的任何顺序。
正如您在下面的代码中看到的,您可以运行setTrigger() 函数,为上述列表中的每个元素生成另一个函数function_Triggered() 的预定触发器。触发器将具有times 中提供的时间和今天的日期。
如果你想每天执行这个任务,那么你只需要为setTrigger()创建一个每日触发器并在times中在最早时间之前运行它.在这种情况下,您每天都在生成触发器,因此 deleteTriggers() 用于删除附加到您的项目的 function_Triggered() 以前(禁用)的触发器。
function setTrigger() {
deleteTriggers();
var times = [[9,30],[9,45],[10,00],[12,00]]; // 9:30 am, 9:45 am, 10:00 am 12:00pm
times.forEach(t_el => scheduledTrigger(t_el[0],t_el[1]));
}
function scheduledTrigger(hours,minutes){
var today_D = new Date();
var year = today_D.getFullYear();
var month = today_D.getMonth();
var day = today_D.getDate();
pars = [year,month,day,hours,minutes];
var scheduled_D = new Date(...pars);
var hours_remain=Math.abs(scheduled_D - today_D) / 36e5;
ScriptApp.newTrigger("function_Triggered")
.timeBased()
.after(hours_remain * 60 *60 * 1000)
.create()
}
function deleteTriggers() {
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
if ( triggers[i].getHandlerFunction() == "function_Triggered") {
ScriptApp.deleteTrigger(triggers[i]);
}
}
}
function function_Triggered() {
// your function code here
}