jQuery Datepicker特定周日开放设置求助:解锁2022年12月25日
问题解决:开放特定周日的日期选择权限
关键问题分析
- 日期格式错误:JavaScript中
getMonth()返回0-11(0对应1月,11对应12月),你要开放的2022年12月25日,对应的日期字符串应该是"25-11-2022",而非原代码中的"25-10-2022"。 - 逻辑颠倒:原代码中如果日期在
work_days数组里会直接锁定该日期,这和你要开放特定日期的需求相反。 - 判断顺序错误:应该优先判断特殊开放日期,再处理周日锁定的逻辑。
修改后的完整代码
function checkDate(e){ reservation_date = new Date(e.value); today = new Date(); reservation_date_today = (reservation_date.getFullYear() == today.getFullYear() && reservation_date.getMonth() == today.getMonth() && reservation_date.getDate() == today.getDate()); console.log(today.getDate() + " " + reservation_date.getDate()); if(reservation_date_today){ jQuery("#reservation_date_validation_message").show(); jQuery("#rest_of_form_after_reservation_date").hide(); }else{ jQuery("#reservation_date_validation_message").hide(); jQuery("#rest_of_form_after_reservation_date").show(); } } $( function() { $( "#datepicker" ).datepicker({ minDate: new Date(), dateFormat: "DD, d MM yy", beforeShowDay: function(date) { var day_of_week = date.getDay(); var day = date.getDate(); var month = date.getMonth(); var year = date.getFullYear(); const oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds const firstDate = new Date(); const secondDate = new Date(year, month, day); const diffDays = Math.round(Math.abs((firstDate - secondDate) / oneDay)); if(diffDays > 183){ return [false,'']; } var current_date = day + "-" + month + "-" + year; // 存放需要开放的特殊日期(注意月份是0-11) var work_days = [ "25-11-2022", // 2022年12月25日 ]; // 优先判断特殊开放日期:如果是特殊日期,直接允许选择 if(work_days.includes(current_date)){ return [true, '']; } // 默认逻辑:锁定所有周日(getDay()返回0表示周日) var is_off_day = day_of_week !== 0; return [is_off_day ,'']; } }); });
核心修改点
- 修正了特殊日期的月份值,将
"25-10-2022"改为"25-11-2022",对应正确的12月25日。 - 调整
work_days的判断逻辑,从返回[false, '']改为[true, ''],确保特殊日期可被选择。 - 调整判断顺序,先检查特殊开放日期,再执行周日锁定的默认逻辑,保证特殊日期优先生效。
- 修复了
checkDate函数中的getYear错误(已废弃),改为getFullYear()以获取完整年份。
内容的提问来源于stack exchange,提问作者user3507500
相关产品推荐
相关产品推荐

