我正在尝试安排Apps脚本功能。我需要电子邮件从上午11点到晚上9点每2小时触发一次周一至周六。
我编写了以下代码来为每天创建触发器:
function createTriggers() {
var days = [ScriptApp.WeekDay.MONDAY,
ScriptApp.WeekDay.TUESDAY,
ScriptApp.WeekDay.WEDNESDAY,
ScriptApp.WeekDay.THURSDAY,
ScriptApp.WeekDay.FRIDAY,
ScriptApp.WeekDay.SATURDAY];
for (var i=0; i<days.length; i++) {
ScriptApp.newTrigger('emailDashboard')
.timeBased().onWeekDay(days[i])
.everyWeeks(1).everyHours(2).create();
}
}
当我运行上面的内容时,我收到以下错误:
“时钟触发器的重复间隔已经设置。(第79行,文件”代码“)”
我无法找到有关该响应的任何内容,并且它实际上并未创建触发器。我假设我上面的内容会每2小时给我发一次周一至周六的电子邮件。我不知道如何从中央上午11点开始到中央时间晚上9点结束。
答案 0 :(得分:1)
您的问题来自过度特异性。您使用的许多选项(例如onWeekDay
和everyWeeks
)是互斥的。您可以在Apps Script reference page上阅读有关课程的更多信息。
更简单的方法是安排所需的粒度:
ScriptApp.newTrigger("myFunction").timeBased().everyHours(2).create();
然后检查当前时间是否符合您的标准:
值得注意的是,当您使用小时特定级别时,Google会按照其选择的分钟值运行您的功能。
与其他触发的功能一样,有一个可用的event object
一个示例鉴别器,假设您只关心UTC值(这是事件对象中所有值的语言环境):
function getsCalledByClockTrigger(e) {
if(!e) throw new Error("Called from the Script Editor");
else console.log(e); // Show this event object in Stackdriver logs.
// Check that it isn't UTC Sunday.
if(e["day-of-week"] === 7)
return;
// Checking the UTC hour is between 11 AM and 9 PM.
if(e.hour < 11 || e.hour > 21)
return;
/* Do stuff */
}
使用var now = new Date()
检查非UTC值的鉴别器可能最简单,并检查Date
等各种now.getDay()
属性。