我只需要在工作日的每小时每小时运行一次Google App脚本脚本。
这两者似乎很容易,但是结合起来我不确定...
每小时触发一次:
ScriptApp.newTrigger("RefreshRates").timeBased().inTimezone("GMT").everyHours(1).nearMinute(0).create();
它需要每小时运行一次,并尽可能接近该小时。 例如09:00、10:00、11:00等。我知道App Script不太准确,但是尽可能接近小时。
我发现这可能有助于解决工作日问题,但是可以将以上内容与类似的内容结合起来
function createWeeklyTrigger() {
var days = [ScriptApp.WeekDay.MONDAY, ScriptApp.WeekDay.TUESDAY,
ScriptApp.WeekDay.WEDNESDAY, ScriptApp.WeekDay.THURSDAY,
ScriptApp.WeekDay.FRIDAY];
for (var i=0; i<days.length; i++) {
ScriptApp.newTrigger("your_function_name")
.timeBased().onWeekDay(days[i])
.atHour(11).create();
}
}
理想状态实际上是格林尼治标准时间周五9:45 pm至10:15 pm,此时外汇市场休市...
编辑: 我想我在最初的问题中对每个工作日的每小时(不是某些小时)做了一些不太清楚的事情。但是市场一周从格林尼治标准时间周日22:00开始,到格林尼治标准时间周五22:00结束。因此,理想的情况是每小时大约从每小时22:00 GMT到星期五22:00 GMT ...
答案 0 :(得分:2)
我认为,最好的选择是在要设置脚本运行时间的每个小时设置一个Trigger
,在设置工作日的那一小时内使用第二个循环,因为everyHours()
不接受开始和结束参数。
请注意,这会创建在一周的同一天触发的单独触发器。
function setWeekdaysTrigger() {
var startHour = 9;
var endHour = 13;
var daysWeek = []; //put Enums for days of the week here;
//set trigger to specific week days;
daysWeek.forEach(function(day){
//set trigger for 9AM to 13PM;
for(var h=startHour; h<endHour; h++) {
var tg = ScriptApp.newTrigger('doSomething').timeBased();
tg.onWeekDay(day);
tg.atHour(h).nearMinute(15).create(); //arbitrary precision (minutes);
}
});
}
作为答案的更新-请注意,很遗憾,您可以代表一个一个用户为该项目创建的how many triggers上有配额(当前等于每个用户20个)每个项目的用户)。
正如注释中所阐明的那样,配置自定义日期 + 自定义小时触发器需要更复杂的处理。提议的解决方案(不计算明确的日期时间检查)是动态触发器配置(因为由于重复重叠而无法同时设置onWeekDay(day)
和everyHours(n)
[我发现onWeekDay(day)
设置了隐式{{ 1}}重复模式]):
首先,创建一个主触发函数来设置天数重复
everyWeeks(1)
第二,创建一个触发器更改函数,该触发器将按设置的重复发生次数触发,该函数将清除先前设置的触发器并创建新的触发器:
function custom24trigger() {
var days = [ScriptApp.WeekDay.TUESDAY]; //put Enum values here;
//create trigger for each date (arbitrary hours);
days.forEach(function(day){
for(var offset = 0; offset < 23; offset=offset+4) { //every 4 hours;
var tg = ScriptApp.newTrigger('changeTriggers').timeBased();
tg.onWeekDay(day).atHour(offset).create(); //change every N hours;
}
});
}