You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script实现每20天发邮件提醒至结束日期的问题求助

问题原因

你的代码存在3个核心问题导致无法实现每隔20天触发提醒:

  1. 你注释了循环计算多轮20天间隔的逻辑,且j变量未声明定义,调用时自然返回undefined
  2. 直接修改了原始起始日期对象date,会导致后续累加计算的基准日期错误
  3. 直接对比日期格式化后的字符串,容易因为格式、时区偏差出现判断错误,优先用时间戳数值对比更稳妥

修正后代码

function emailAlert() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var lastCol = sheet.getLastColumn();
  var dataRange = sheet.getRange( 2, 1, lastRow-1, lastCol);
  var data = dataRange.getValues();
  // 统一格式化今天的日期转成时间戳,避免重复计算
  var today = new Date();
  var todayTimestamp = new Date(Utilities.formatDate(today, "ET", "yyyy/MM/dd")).getTime();

  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var startDate = new Date(row[3]);
    var endDate = new Date(row[4]);
    // 起止日期统一转成当天零点的时间戳,避免时间部分影响判断
    var startTimestamp = new Date(Utilities.formatDate(startDate, "ET", "yyyy/MM/dd")).getTime();
    var endTimestamp = new Date(Utilities.formatDate(endDate, "ET", "yyyy/MM/dd")).getTime();
    var endDateFormat = Utilities.formatDate(endDate, "ET", "dd/MM/yyyy");

    // 每隔20天循环计算一次,直到超过结束日期就停止
    for (var j = 20; ; j += 20) {
      // 用原始起始日期计算第j天的时间戳,不修改原始变量
      var checkTimestamp = startTimestamp + j * 24 * 60 * 60 * 1000;
      // 超过结束日期直接终止当前循环
      if (checkTimestamp > endTimestamp) {
        break;
      }
      // 匹配到今日就发邮件
      if (checkTimestamp === todayTimestamp) {
        var subject = 'Progetto formativo' + row[0] + ' - ' + endDateFormat;
        var message = ' Controllare documenti Progetto Formativo ' +
          '\n' +
          ' CODICE FISCALE: ' + row[0] +
          '\n' +
          ' NOME: ' + row[1] +
          '\n' +
          ' COGNOME: ' + row[2] +
          '\n' +
          ' DATA INIZIO: ' + Utilities.formatDate(startDate, "ET", "dd/MM/yyyy") +
          '\n' +
          ' DATA FINE: ' + endDateFormat;
        MailApp.sendEmail('email@gmail.com', subject, message);
        // 同一行数据当天仅发一次,触发后直接跳出当前循环
        break;
      }
    }
  }
}

额外配置提醒

代码调试完成后,需要在Google Apps Script后台添加时间驱动触发器,设置为每天固定时间运行一次emailAlert函数,才能保证每天自动检查是否需要发送提醒。


内容的提问来源于stack exchange,提问作者Suhas Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:54:03