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

如何在jQuery Datepicker中禁用第二周和第四周?

解决jQuery Datepicker禁用第二、第四周的问题

你的代码核心问题是逻辑结构错误:周数判断的代码不在beforeShowDay函数内部,完全无法生效;另外函数内的minDate: 0属于无效语法,只会干扰逻辑。下面是修正后的完整方案:

核心思路

要同时实现「指定星期几可选」和「禁用第二、第四周」,需要把两个判断逻辑都放在beforeShowDay回调里——这个回调会在每个日期渲染前执行,返回[是否可选, 样式类名]来控制日期状态。

修正后的代码

$('#stp-datepicker').datepicker({
    minDate: "0",
    beforeShowDay: function (date) {
        // 计算当前日期在当月的周数(默认一周从周日开始)
        function getWeekOfMonth(date) {
            const firstDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1).getDay();
            const adjustedDay = date.getDate() + firstDayOfMonth;
            return Math.ceil(adjustedDay / 7);
        }

        const day = date.getDay();
        const weekOfMonth = getWeekOfMonth(date);

        // 1. 允许的星期几:原代码逻辑是只允许周日(0)和周四(4)
        const isAllowedDay = day === 0 || day === 4;
        // 2. 排除第二周和第四周
        const isAllowedWeek = weekOfMonth !== 2 && weekOfMonth !== 4;

        // 两个条件同时满足才允许选择
        return [isAllowedDay && isAllowedWeek, ''];
    }
});

周数计算调整

如果你的业务中一周是从周一开始,需要修改getWeekOfMonth函数的计算逻辑:

function getWeekOfMonth(date) {
    let firstDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1).getDay();
    // 把周日(0)转为7,适配周一为一周起始的规则
    firstDayOfMonth = firstDayOfMonth === 0 ? 7 : firstDayOfMonth;
    const adjustedDay = date.getDate() + (firstDayOfMonth - 1);
    return Math.ceil(adjustedDay / 7);
}

关键说明

  • 原代码的星期几判断可以简化为直接指定允许的天数(day === 0 || day === 4),比排除法更直观易维护。
  • 所有判断逻辑必须放在beforeShowDay内部,确保每个日期渲染时都会执行校验。

内容的提问来源于stack exchange,提问作者Jon Danyeur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:43:13