更新所需过程的描述:
在每个新的一天的00:00:00开始时,将由当前日期和时间组成的第一个时间戳记写入单元格A2。
同一天,在22:00:00,将由当前日期和代码中指定的时间组成的下一个时间戳记写入单元格A3和A4。
示例:
1。)触发器1应该执行以下操作:今天00:00:00->将时间戳(当前日期+当前时间)写入单元格A2
2。)触发器2应该执行以下操作:今天22:00:00->将时间戳记(当前日期+ 22:00:00)写入单元格A3和将(当前日期+ 23:59:59)写入单元格A4
3。)第二天,同一游戏
此过程每天重复。
此过程可以使用下面显示的代码吗?还是有更好,更有效的解决方案?
function TimeTrigger(functionName) {
deleteTrigger(functionName);
// Script writes two timestamps in cells A2 and A3.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Tickerprüfung');
sheet.getRange('A2').setValue(new Date());
var date = new Date();
date.setHours(22);
date.setMinutes(0);
date.setSeconds(0);
date.setMilliseconds(0);
sheet.getRange('A3').setValue(date);
var date1 = new Date();
date1.setHours(23);
date1.setMinutes(59);
date1.setSeconds(59);
date1.setMilliseconds(00);
sheet.getRange('A4').setValue(date1);
}
function TimeTrigger1() {TimeTrigger("TimeTrigger1")}
function TimeTrigger2() {TimeTrigger("TimeTrigger2")}
function deleteTrigger(functionName) {
var triggers = ScriptApp.getProjectTriggers();
triggers.forEach(function(t) {
if (t.getHandlerFunction() == functionName) ScriptApp.deleteTrigger(t);
});
}
function createDayTrigger() {
var d1 = new Date();
d1.setDate(d1.getDate() + 1); // <--- Added
d1.setHours(22);
d1.setMinutes(0);
d1.setSeconds(0);
ScriptApp.newTrigger('TimeTrigger1').timeBased().at(d1).create();
var d2 = new Date();
d2.setDate(d2.getDate() + 1);
d2.setHours(0);
d2.setMinutes(1); // Do you want to run at "00:01"?
d2.setSeconds(0);
ScriptApp.newTrigger('TimeTrigger2').timeBased().at(d2).create();
}
// This function has to be started once to get "createDayTrigger()" started.
function startScript() {
ScriptApp.newTrigger('createDayTrigger').timeBased().everyDays(1).atHour(21).create();
}
作为几种方法之一,如果您想为everyDays
使用一个触发器,那么下面的修改脚本怎么样?
在此修改中,流程如下。
createDayTrigger
被设置为everyDays
的触发器,该触发器在“ 21:00”附近运行。startScript()
的功能仅需运行一次。运行此功能后,将自动运行时间驱动的触发器。createDayTrigger
时,将TimeTrigger1
和TimeTrigger2
的功能设置为at
的触发器,它们在“ 22:00”和“ 00:01”处运行。TimeTrigger1
时,运行TimeTrigger
的功能并清除TimeTrigger1
的触发。TimeTrigger2
时,运行TimeTrigger
的功能并清除TimeTrigger2
的触发。在此循环中,TimeTrigger
的功能可由TimeTrigger1
和TimeTrigger2
在“ 22:00”和“ 00:01”运行。
function TimeTrigger(functionName) {
deleteTrigger(functionName);
// Script writes two timestamps in cells A2 and A3.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Tickerprüfung');
sheet.getRange('A2').setValue(new Date());
var date = new Date();
date.setHours(22);
date.setMinutes(0);
date.setSeconds(0);
date.setMilliseconds(0);
sheet.getRange('A3').setValue(date);
var date1 = new Date();
date1.setHours(23);
date1.setMinutes(59);
date1.setSeconds(59);
date1.setMilliseconds(00);
sheet.getRange('A4').setValue(date1);
}
function TimeTrigger1() {TimeTrigger("TimeTrigger1")}
function TimeTrigger2() {TimeTrigger("TimeTrigger2")}
function deleteTrigger(functionName) {
var triggers = ScriptApp.getProjectTriggers();
triggers.forEach(function(t) {
if (t.getHandlerFunction() == functionName) ScriptApp.deleteTrigger(t);
});
}
function createDayTrigger() {
var d1 = new Date();
d1.setHours(22);
d1.setMinutes(0);
d1.setSeconds(0);
ScriptApp.newTrigger('TimeTrigger1').timeBased().at(d1).create();
var d2 = new Date();
d2.setDate(d2.getDate() + 1);
d2.setHours(0);
d2.setMinutes(1); // Do you want to run at "00:01"?
d2.setSeconds(0);
ScriptApp.newTrigger('TimeTrigger2').timeBased().at(d2).create();
}
// This function has to be started once to get "createDayTrigger()" started.
function startScript() {
ScriptApp.newTrigger('createDayTrigger').timeBased().everyDays(1).atHour(21).create();
}
d2.setDate(d2.getDate() + 1);
。因为设置触发器后,“ 00:01”是明天。根据您的回复评论和更新的问题,我可以理解您要将触发时间设置为同一天的00:00和22:00。在上面的答案中,第一个触发器和第二个触发器分别是今天的22:00和明天的00:00。但是,此循环通过安装有createDayTrigger
的触发器继续进行。这样,在下一个周期之后,将触发同一天的00:00和22:00。但这似乎没有用。因此,我提出了修改后的脚本。请按如下方式修改我的上述脚本。
function createDayTrigger() {
var d1 = new Date();
d1.setDate(d1.getDate() + 1); // <--- Added
d1.setHours(22);
d1.setMinutes(0);
d1.setSeconds(0);
ScriptApp.newTrigger('TimeTrigger1').timeBased().at(d1).create();
var d2 = new Date();
d2.setDate(d2.getDate() + 1);
d2.setHours(0);
d2.setMinutes(1); // Do you want to run at "00:01"?
d2.setSeconds(0);
ScriptApp.newTrigger('TimeTrigger2').timeBased().at(d2).create();
}
createDayTrigger()
时,触发时间00:00和22:00被设置为同一天。