如何为日期选择器自动设置每两周选中周一?
自动实现每两周选中周一的日期选择器优化方案
当然有更简便的方法,完全不用手动逐个编写日期。原代码里维护enabledDays数组的方式不仅繁琐,后续日期更新还要手动修改,我们可以通过日期计算逻辑动态判断日期是否符合条件。
优化后的代码
<script type="text/javascript"> gform.addFilter( 'gform_datepicker_options_pre_init', function( optionsObj, formId, fieldId ) { if ( formId == 3 && fieldId == 45 ) { optionsObj.minDate = 0; // 设定第一个需要选中的基准周一(对应你原代码里的起始日期) const baseMonday = new Date('2023-05-22'); optionsObj.beforeShowDay = function(date) { // 先判断当前日期是否是周一(getDay()返回1代表周一) const isMonday = date.getDay() === 1; if (!isMonday) { return [false]; } // 计算当前日期与基准日期的天数差 const timeDiff = date.getTime() - baseMonday.getTime(); const dayDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24)); // 验证天数差是否为14的整数倍,且日期不早于基准日期 const isTwoWeekInterval = dayDiff >= 0 && dayDiff % 14 === 0; return [isTwoWeekInterval]; }; } return optionsObj; } ); </script>
关键逻辑说明
- 基准日期设定:
baseMonday是你需要开始选中的第一个周一,后续所有符合条件的日期都是这个日期每两周的周一 - 周一判断:通过
date.getDay() === 1快速过滤非周一的日期 - 间隔验证:计算当前日期和基准日期的天数差,只要差是14的整数倍(两周)且不早于基准日期,就标记为可选日期
这种方式的优势在于:后续如果需要调整起始日期或者间隔周期(比如改成三周),只需要修改baseMonday或者把14换成21即可,无需手动维护冗长的日期数组,扩展性和维护性都强很多。
内容的提问来源于stack exchange,提问作者Nicholas Lee
相关产品推荐
相关产品推荐

