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

Google Apps Script日期加5天格式化仅输出日期问题排查

问题根因
  • 代码中调用的moment库没有在Google Apps Script环境中预装,直接调用会抛出引用错误,日期格式化逻辑根本没执行,最终输出原始的带时区的时间字符串
  • curDate.setDate()的返回值是毫秒级时间戳,不是Date对象,即使引入moment,直接传时间戳虽然能解析,但逻辑写法不规范
  • 你写的moment格式串DD/MM/YY输出的是两位年、日在前月在后的格式,和你需要的月/日/四位年的要求不匹配
修复方案

直接使用Apps Script内置的日期格式化工具即可,不需要引入第三方库,修复后可直接运行的代码如下:

function findEmailAddress() {
  var ss = SpreadsheetApp.getActive();
  var sh1 = ss.getSheetByName('Working');
  var vs1 = sh1.getRange('H1:H' + sh1.getLastRow()).getValues().flat();
  var sh2 = ss.getSheetByName('Match');
  var vs2 = sh2.getRange('A2:B' + sh2.getLastRow()).getValues();
  var matchRows = vs2.filter(row => row[0].length && vs1.includes(row[0]));
  // 自动读取表格设置的时区,避免时区偏差导致日期错误
  var tz = ss.getSpreadsheetTimeZone();
  matchRows.forEach(row => {
    var mailMatch = row[1];
    var targetDate = new Date();
    // 计算5天后的日期,直接修改原日期实例即可
    targetDate.setDate(targetDate.getDate() + 5);
    // 按要求格式化:两位月份/不补零的日期/四位年份,输出格式如07/10/2022
    var dateStr = Utilities.formatDate(targetDate, tz, "MM/d/YYYY");
    var subject = "Action Required!!!  5 Days Til Expiration";
    var body = `You have a new expiration date for completion ${dateStr} all tasks associated with this must be complete. *This email is automatically generated do not reply*`;
    GmailApp.sendEmail(mailMatch, subject, body);
  });
}
注意事项
  • 如果需要固定输出两位日期(比如5号显示05而不是5),把格式串里的d改成dd即可,对应格式为MM/dd/YYYY
  • 不要依赖脚本默认时区做日期计算,优先读取表格本身的时区配置,避免跨时区运行时出现日期差1天的问题
  • 如果一定要用moment,需要手动在Apps Script编辑器的「库」配置中添加moment的对应脚本ID,内置方法完全能满足需求,不建议额外引入第三方库增加复杂度

内容的提问来源于stack exchange,提问作者Jon Beckner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:33:14