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

jQuery Datepicker特定周日开放设置求助:解锁2022年12月25日

问题解决:开放特定周日的日期选择权限

关键问题分析

  1. 日期格式错误:JavaScript中getMonth()返回0-11(0对应1月,11对应12月),你要开放的2022年12月25日,对应的日期字符串应该是"25-11-2022",而非原代码中的"25-10-2022"。
  2. 逻辑颠倒:原代码中如果日期在work_days数组里会直接锁定该日期,这和你要开放特定日期的需求相反。
  3. 判断顺序错误:应该优先判断特殊开放日期,再处理周日锁定的逻辑。

修改后的完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:57:50