设置开始日期最小值为结束日期减90天的JS代码不生效,求解决
问题排查与修复方案
原代码存在的问题
- 日期运算逻辑错误:JS Date对象直接做减法得到的是毫秒级时间戳,
end-90仅代表结束日期往前90毫秒,完全不符合90天的需求;且直接通过时间戳加减计算日期容易出现跨月、闰年计算偏差,更稳妥的方式是用Date内置的setDate方法处理。 - 仅在页面初始化时执行一次逻辑:如果用户后续修改结束日期的选中值,开始日期的可选最小值不会同步更新。
- 缺少空值判断:如果页面初始化时结束日期还没有选中值,
endDate.get_selectedDate()会返回null,后续操作会直接报错。
修复后代码
$(document).ready(function () { var startDate = $find('<%= RdpStartDate.ClientID %>'); var endDate = $find('<%= RdpEndDate.ClientID %>'); // 封装更新开始日期最小值的公共方法 function updateStartMinDate() { var end = endDate.get_selectedDate(); // 结束日期未选中时不做限制,可根据自身业务需求调整规则 if (!end) { startDate.set_minDate(null); return; } // 计算结束日期往前90天的日期,自动处理跨月、闰年等边界场景 var minStartDate = new Date(end); minStartDate.setDate(minStartDate.getDate() - 90); startDate.set_minDate(minStartDate); } // 页面初始化时执行一次规则校验 updateStartMinDate(); // 监听结束日期的变更事件,值变化时同步更新开始日期的可选最小值 endDate.add_dateSelected(updateStartMinDate); });
内容的提问来源于stack exchange,提问作者Sanmeet Singh
相关产品推荐
相关产品推荐

