如何让指定Google Apps Script仅在工作日10:00-17:00每小时触发?
实现工作日特定时段每小时触发Buy函数的代码修改方案
一、修改原Buy函数,添加时间校验逻辑
在原函数开头加入时间检查,确保只有符合条件的时段才执行核心逻辑(即使手动运行或触发器异常触发也会过滤):
function Buy() { // 新增:时间与日期校验 const now = new Date(); const dayOfWeek = now.getDay(); // 0=周日,1=周一,...,5=周五,6=周六 const hour = now.getHours(); // 仅在周一至周五(1-5)的10:00-17:00之间执行 if (dayOfWeek < 1 || dayOfWeek > 5 || hour < 10 || hour >= 17) { return; // 不符合条件直接退出 } // 原函数逻辑保持不变 var ss=SpreadsheetApp.getActive(); var sheet=ss.getSheetByName("Buy"); var Cvalues=sheet.getRange(2,3,sheet.getLastRow()-1,1).getValues(); var Avalues=sheet.getRange(2,1,sheet.getLastRow()-1,1).getValues(); var results=[]; for(var i=0;i<Cvalues.length;i++){ if(Cvalues[i][0]<=-3){ results.push(" "+ Avalues[i]); results.push("Price "+ Cvalues[i]); MailApp.sendEmail('email@gmail.com', 'Buy Alert',results.join("\n")); } } }
二、添加创建定时触发器的函数
运行这个函数一次,即可创建符合要求的时间驱动触发器:
function createHourlyBuyTrigger() { // 先删除已有的Buy函数触发器,避免重复创建 const existingTriggers = ScriptApp.getProjectTriggers(); for (const trigger of existingTriggers) { if (trigger.getHandlerFunction() === "Buy") { ScriptApp.deleteTrigger(trigger); } } // 创建新的触发器:每小时触发,仅工作日10:00-17:00 ScriptApp.newTrigger("Buy") .timeBased() .everyHours(1) // 每小时触发 .duringHours(10, 17) // 限定在10点到17点之间 .onWeekDay(ScriptApp.WeekDay.MONDAY) .onWeekDay(ScriptApp.WeekDay.TUESDAY) .onWeekDay(ScriptApp.WeekDay.WEDNESDAY) .onWeekDay(ScriptApp.WeekDay.THURSDAY) .onWeekDay(ScriptApp.WeekDay.FRIDAY) .create(); }
操作步骤说明
- 将修改后的Buy函数替换原代码,把
createHourlyBuyTrigger函数添加到脚本中。 - 在脚本编辑器中,选择
createHourlyBuyTrigger函数,点击运行按钮,完成首次授权(需要允许脚本访问相关权限)。 - 授权完成后,触发器自动创建,后续Buy函数会在工作日的10:00-17:00期间每小时自动执行一次。
注:若要调整时段或触发频率,可修改duringHours和everyHours的参数;如需删除触发器,可在脚本编辑器的「编辑」→「当前项目的触发器」中管理,或再次运行createHourlyBuyTrigger函数(会自动删除旧触发器并创建新的)。
内容的提问来源于stack exchange,提问作者DPK
相关产品推荐
相关产品推荐

