DatePicker 屏蔽周末

DatePicker block out weekends

我需要跳过 DatePicker 日历上的周末。下面的第一个 post 帮助我弄清楚了如何 阻止 周末,但是,它本身并不能满足我的需要。

让我举几个例子:

  1. 假设今天是星期一。最好的 3 个选项将在星期一显示, 周二和周三。
  2. 现在假设今天是星期四。日历上接下来显示的 3 个选项是星期四、星期五和星期一。
  3. 最后说今天是星期六。日历上接下来显示的 3 个选项将是星期一、星期二、星期三。

换句话说,select 应该总是有 3 天可用,而且应该只是工作日。

<script>
//initialise datepicker
$(function() {
    $( ".datepicker").datepicker({
        dateFormat: 'dd/mm/yy',
         minDate: 0,
         maxDate: 2
    });
  /*
  $('body').on('focus',".datepicker", function(){
    $(this).datepicker({dateFormat: 'dd/mm/yy'});
  })*/

  $('.cal').on('click', function(e) {
    var target = $(this).closest('.calendar').find('.datepicker');
    target.datepicker('show');
  });
});

</script>

假设您正在使用 jQuery UI 日期选择器(其他日期选择器可用):

$( "#datepicker" ).datepicker({
    dateFormat: 'dd/mm/yy',
    minDate: 0,
    maxDate: 2,
    beforeShowDay: $.datepicker.noWeekends
});

Link 到 documentation.

beforeShowDay 接受一个函数作为回调来确定要显示的日期,该函数根据日期返回 truefalse。例如,可以提供一个自定义函数来仅排除星期日。

我认为这是一个非常肮脏的 hack,你可以克服它:

$("#datepicker").datepicker({
    dateFormat: 'dd/mm/yy',
    beforeShowDay: $.datepicker.noWeekends,
    minDate: 0,
    maxDate: (function () {
        var today = new Date().getDay(), add = 0;
        switch (today) {
            case 0:
                add = 1;
                break;
            case 4:
            case 5:
            case 6:
                add = 2;
                break;
        }
        return 2 + add;
    })()
});