运行 Gmail Google Apps 脚本每天在 8:00、12:30、17:00
Run a Gmail Google Apps Script daily at 8:00, 12:30, 17:00
我需要 运行 一个 Google Apps 脚本,一天三次:在 8:00、12:30、17:00.
怎么做?
我已经看过 Triggers
,更具体地说 Time driven
:
小时计时器,但是Every hour
、Every 2 hours
、Every 4 hours
这里没有适配
日计时器,但是8am to 9am
不是很精确,我希望更精确一些,而且12:30也不可能
具体时间,不过后来YYYY-MM-DD HH:MM
不适应运行就天天
From calendar
触发器似乎也不适应。
const createTrigger = ([hour, minute])=>
ScriptApp.newTrigger("myFunction")
.timeBased()
.atHour(hour)
.nearMinute(minute)
.everyDays(1)
.create();
[[8,0],[12,30],[17,0]].forEach(createTrigger)
尽管 TheMaster 的回答是正确的,但我想详细说明一种可能对未来的读者和不同项目有用的替代方法。
假设您有一个列表,其中包含您希望每天安排的特定 次(24 小时:分钟):
var times = [[9,30],[9,45],[10,00],[12,00]] // 9:30 am, 9:45 am, 10:00 am 12:00pm
可以完全随机,遵循您喜欢的任何顺序。
正如您在下面的代码中看到的,您可以 运行 setTrigger()
函数,生成另一个函数 scheduled 触发器 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
}
soMario 和 TheMaster 有可行的解决方案,但不幸的是,对于我的用例,我需要比 + 或 - 15 分钟更严格的容差!! google 应用程序脚本调度程序 'works' 基于它。
我使用他们非常不准确的调度程序每 5 分钟 运行 下面的函数。这个函数会非常准确地检查当前时间,目前看来,只有 运行 下一个 'core' 函数在你想要的小时和分钟内。一个简单的 if 条件添加,使用 getDay() 将添加星期几 'filter'.
function timeCheck() {
var nowH=new Date().getHours();
var nowM=new Date().getMinutes();
Logger.log('Hour: '+nowH+' Minute: '+nowM)
if (nowH = 1 && nowM < 12) { getStatus() }
if (nowH = 10 && (nowM > 15 && nowM < 27)) { getStatus() }
return
}
我需要 运行 一个 Google Apps 脚本,一天三次:在 8:00、12:30、17:00.
怎么做?
我已经看过 Triggers
,更具体地说 Time driven
:
小时计时器,但是
Every hour
、Every 2 hours
、Every 4 hours
这里没有适配日计时器,但是
8am to 9am
不是很精确,我希望更精确一些,而且12:30也不可能具体时间,不过后来
YYYY-MM-DD HH:MM
不适应运行就天天
From calendar
触发器似乎也不适应。
const createTrigger = ([hour, minute])=>
ScriptApp.newTrigger("myFunction")
.timeBased()
.atHour(hour)
.nearMinute(minute)
.everyDays(1)
.create();
[[8,0],[12,30],[17,0]].forEach(createTrigger)
尽管 TheMaster 的回答是正确的,但我想详细说明一种可能对未来的读者和不同项目有用的替代方法。
假设您有一个列表,其中包含您希望每天安排的特定 次(24 小时:分钟):
var times = [[9,30],[9,45],[10,00],[12,00]] // 9:30 am, 9:45 am, 10:00 am 12:00pm
可以完全随机,遵循您喜欢的任何顺序。
正如您在下面的代码中看到的,您可以 运行 setTrigger()
函数,生成另一个函数 scheduled 触发器 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
}
soMario 和 TheMaster 有可行的解决方案,但不幸的是,对于我的用例,我需要比 + 或 - 15 分钟更严格的容差!! google 应用程序脚本调度程序 'works' 基于它。
我使用他们非常不准确的调度程序每 5 分钟 运行 下面的函数。这个函数会非常准确地检查当前时间,目前看来,只有 运行 下一个 'core' 函数在你想要的小时和分钟内。一个简单的 if 条件添加,使用 getDay() 将添加星期几 'filter'.
function timeCheck() {
var nowH=new Date().getHours();
var nowM=new Date().getMinutes();
Logger.log('Hour: '+nowH+' Minute: '+nowM)
if (nowH = 1 && nowM < 12) { getStatus() }
if (nowH = 10 && (nowM > 15 && nowM < 27)) { getStatus() }
return
}