如何在准确的时间 运行 google 应用程序脚本?

How to run google app script at exact time?

目前,我想 运行 我的 google 应用程序脚本在准确的时间。我已经对这个问题做了一些阅读,我决定遵循这个 post It's possible run Google Sheets script Exact Time Everyday?.

中的解决方案

但是,每次触发只能工作一次。第二次触发时会显示error。我 google 关于这个问题,他们中的大多数人都说这是 google v8 错误。( https://issuetracker.google.com/issues/150756612)。

所以,我决定将我的代码降级为 ES5,因为这是 post( https://issuetracker.google.com/issues/150756612 的唯一解决方案).但是,我遇到了将 spread operator(...) 更改为 ES5

的问题

这是我的代码:

function runTrigger(hours,minutes) {
  
  var today_D=new Date();
  var year=today_D.getFullYear();
  var month=today_D.getMonth();
  var day=today_D.getDate();
  
  day=day+1; 
  
  var pars=[year,month,day,hours,minutes];
  
  var schedule_date=new Date(...pars);
  var hours_reamain=Math.abs(schedule_date - today_D)/36e5;
  
  ScriptApp.newTrigger("testFunction")
   .timeBased()
   .after(hours_reamain*60*60*1000)
   .create()  
}

function deleteTrigger() {
  var triggers=ScriptApp.getProjectTriggers();
  
  var ssId="1d5P4ohgSLtOzuInxq1IYQUsB4GybeYhth5Gj21RI3rA";
  var ss=SpreadsheetApp.openById(ssId);
  
  for(var i=0 ; i< triggers.length ; i++) {
    ss.appendRow([new Date() ,JSON.stringify(triggers[i]), JSON.stringify(triggers[i].getHandlerFunction()) , JSON.stringify(triggers[i].getEventType()) , JSON.stringify(triggers[i].getTriggerSource())])
    if(triggers[i].getHandlerFunction() === "testFunction") {
      ScriptApp.deleteTrigger(triggers[i]);
    }
  }
}

function setTrigger() { 
    deleteTrigger();
    runTrigger(1,35);
}

function testFunction() {
  //some code at here
  setTrigger();
}

谁能教我如何将 ...(spread operator) 更改为 ES5

到目前为止我正在做的是抛出一个函数,该函数将触发器设置为基于当前时间的准确时间。我确保删除之前的触发器并重新创建它。

function actionAtExactHour() {
  var f = 'myFunction'
  ScriptApp.getProjectTriggers().filter(trigger => trigger.getHandlerFunction() == f).forEach(t => ScriptApp.deleteTrigger(t))
  var d = new Date();
  ScriptApp.newTrigger(f)
    .timeBased()
    .after((60 - d.getMinutes()) * 60 * 1000)
    .create()
}
function myFunction(){
  SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange('A1').setValue(new Date())
}

但是,我无法将触发器放在 actionAtExactHour 上,例如每天触发触发器并在每天准确的时间让 myFunction 运行...google 将禁用该触发器。为此,我需要在我想要的确切时间

前几分钟自己 运行 actionAtExactHour

这是一个 javascript Date() 构造函数

 var schedule_date=new Date(year,month,day,hours,minutes);

Date() constructor

我不相信有人可以在确切的时间将触发器设置为 运行。我的建议是将触发器设置为 运行 您希望它触发的时间前一小时,然后,让您运行 运行 循环检查确切时间,也许 运行每分钟。