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

Google Script匹配明日日期与Google表单提交日期判定不生效求助

问题原因与解决方案

核心错误原因

  • 第一:Range.getValues() 方法返回的是二维数组,你遍历拿到的orderDate[i]是数组类型,而非日期对象,和Date类型的t做全等判断自然不成立,日志输出看起来一致是因为数组隐式转成了字符串打印。
  • 第二:哪怕拿到了正确的Date对象,两个不同的Date实例用===判断也永远返回false,全等运算符对引用类型比较的是内存地址而非实际存储的时间值。
  • 第三:你构造的t默认时分秒为0,如果表单提交的日期带具体提交时间,哪怕日期一致,时间戳也会不同。

修复方案

统一将对比的两个值转成相同格式的纯日期字符串再做判断,同时注意从二维数组中取实际值,修改代码如下:

function ArchiveTuesdayOrder() {
  const date = new Date();
  date.setDate(date.getDate() + 1);
  // 提前格式化好明天的日期字符串,用于后续对比
  const tomDate = Utilities.formatDate(date, "America/New_York", "MM-dd-yyyy");
  const sheetActive = SpreadsheetApp.openById("xxxxxxxxxxxxxx");
  const sheet = sheetActive.getSheetByName("xxxxxxxxxxxxxx");
  const orderdateRange = sheet.getRange(2, 4, 100);
  const orderDate = orderdateRange.getValues();

  for (let i = 0; i < orderDate.length; i++) {
    // 从二维数组中取出当前行的日期值
    const currentOrderDate = orderDate[i][0];
    // 跳过空行
    if (!currentOrderDate) continue;
    // 将表格里的日期也转成相同格式的字符串再对比
    const formattedOrderDate = Utilities.formatDate(currentOrderDate, "America/New_York", "MM-dd-yyyy");
    if (tomDate === formattedOrderDate) {
      Logger.log("YES" + currentOrderDate);
      // 后续业务逻辑写在这里
    }
  }
}

如果偏好比较时间戳的方式,也可以用如下判断逻辑:

// 去掉两个日期的时分秒部分再比较时间戳
const t = new Date(date.getFullYear(), date.getMonth(), date.getDate());
const currentDate = new Date(currentOrderDate.getFullYear(), currentOrderDate.getMonth(), currentOrderDate.getDate());
if (t.getTime() === currentDate.getTime()) {
  // 匹配成功逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:45:02