You need to enable JavaScript to run this app. Apps Script配置为每月31日触发的时间触发器在30天月份能否正常运行
优惠活动
大模型
产品
解决方案
定价
更多

Apps Script配置为每月31日触发的时间触发器在30天月份能否正常运行

设置月触发器为31日时,无31日的月份能否正常触发

你编写的触发器代码

function timerTrigger() {
  ScriptApp.newTrigger('codeTrigger')
  .timeBased()
  .onMonthDay(31)
  .atHour(23)
  .inTimezone('Indian/Mauritius')
  .create()
}

实际触发规则

这段代码创建的月触发器,会严格按照Google Apps Script的月日触发逻辑运行:

  • 当月存在31日时,触发器会在设置的毛里求斯时区下,当月31日23:00准时触发codeTrigger函数
  • 当月不存在31日时(包括只有30天的4/6/9/11月、平年2月、闰年2月),该月的触发会被直接跳过,没有自动顺延到当月最后一天、补触发的机制

也就是说,仅靠这段31日的触发器,全年有近一半的月份完全不会执行目标函数。

适配月末天数差异的实现方案

Google Apps Script没有提供「每月最后一天」的原生触发器选项,要实现固定在每个月最后一天23点(毛里求斯时区)触发的需求,可以按如下逻辑调整:

  • 分别创建28日、29日、30日、31日四个固定时间触发器,统一设置为23点、毛里求斯时区,全部指向同一个codeTrigger函数
  • 在codeTrigger函数最开头增加判断逻辑:只有当前日期是当月最后一天时,才执行核心业务逻辑;如果不符合判断条件,直接退出函数

判断逻辑参考代码:

function codeTrigger() {
  const currentTime = new Date();
  // 计算当月最后一天的日期数值
  const lastDayNum = new Date(currentTime.getFullYear(), currentTime.getMonth() + 1, 0).getDate();
  // 非当月最后一天直接退出
  if (currentTime.getDate() !== lastDayNum) return;

  // 以下放置原本要执行的核心业务代码
}

这套逻辑可以100%覆盖所有月份的场景:

  • 平年2月(28天):28日触发时即为当月最后一天,正常执行
  • 闰年2月(29天):28日触发时不满足判断条件直接退出,29日触发时为当月最后一天,正常执行
  • 30天的小月:28日、29日触发时不满足判断条件直接退出,30日触发时为当月最后一天正常执行,31日的触发因当月无对应日期直接跳过
  • 31天的大月:28日、29日、30日触发时不满足判断条件直接退出,31日触发时为当月最后一天正常执行

内容的提问来源于stack exchange,提问作者P.J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 07:06:04