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

JS日期验证逻辑失效求助:表单日期校验未按预期执行

问题分析与修复方案

原代码核心问题

  1. 校验逻辑完全偏离需求:原条件((timestampYear - dateOfBirthYear) === 1) && (timestampMonth === (dateOfBirthMonth -1))仅校验了一种极端且无关的场景(timestamp比dateOfBirth大1年且月份小1),和“输入日期晚于当前时间1个月”的需求完全不匹配,这是校验失效的根本原因。
  2. 变量使用错误:需求是和当前时间对比,但代码中用的是表单传入的timestamp而非系统当前时间,逻辑对象错误。
  3. 手动计算年月差易出错:直接操作年份、月份会忽略跨年度的月份转换(如1月减1应为去年12月),逻辑覆盖不全。

修复后的代码

else {
  // 获取用户输入的日期并校验有效性
  var inputDate = new Date(formObject.dateOfBirth);
  if (isNaN(inputDate.getTime())) {
    Swal.fire({
      title: '错误!',
      text: '请输入有效的日期格式',
      icon: 'error',
      confirmButtonText: '关闭'
    });
    return;
  }

  // 计算当前时间往后推1个月的时间
  var now = new Date();
  var oneMonthLater = new Date(now);
  oneMonthLater.setMonth(now.getMonth() + 1);

  // 判断输入日期是否晚于当前时间1个月
  if (inputDate > oneMonthLater) {
    Swal.fire({
      title: '错误!',
      text: 'LAZY PO',
      icon: 'error',
      confirmButtonText: '关闭'
    });
  } else {
    google.script.run.processForm(formObject);
    Swal.fire({
      title: '成功!',
      text: '数据已提交至DELIVERY SUPPORT部门。',
      icon: 'success',
      confirmButtonText: '关闭'
    });
    document.getElementById("myForm").reset();
  }
}

关键修复点

  • 改用时间戳直接对比:通过setMonth自动处理跨年度的月份转换,避免手动计算年月的误差。
  • 新增日期有效性校验:防止输入无效日期导致逻辑异常。
  • 修正对比对象:使用系统当前时间new Date()替代表单传入的timestamp,匹配需求逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:45:38