JS日期验证逻辑失效求助:表单日期校验未按预期执行
问题分析与修复方案
原代码核心问题
- 校验逻辑完全偏离需求:原条件
((timestampYear - dateOfBirthYear) === 1) && (timestampMonth === (dateOfBirthMonth -1))仅校验了一种极端且无关的场景(timestamp比dateOfBirth大1年且月份小1),和“输入日期晚于当前时间1个月”的需求完全不匹配,这是校验失效的根本原因。 - 变量使用错误:需求是和当前时间对比,但代码中用的是表单传入的
timestamp而非系统当前时间,逻辑对象错误。 - 手动计算年月差易出错:直接操作年份、月份会忽略跨年度的月份转换(如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
相关产品推荐
相关产品推荐

