结合JQuery DatePicker BeforeShowDay的两个函数

时间:2017-12-01 06:10:24

标签: javascript jquery function datepicker

如何创建一个功能,该功能结合了第一个禁用一周中特定日期的功能;

function disableweekdays(date) {
    var day = date.getDay();
    return [(day != 0 && day != 2 && day != 4 && day != 5), ""];  
} 

第二个功能禁用一年中的特殊日期;

function disablespecialdays(date){
    var array = ["12-25", "01-01"]
    var string = jQuery.datepicker.formatDate('mm-dd', date);
    return [ array.indexOf(string) == -1 ]
}

这样他们的结果可以合并为 beforeShowDay ;

$("#myid").datepicker({
    beforeShowDay: disableweekdays,
    minDate: 0, 
    dateFormat: 'dd-MM-yy',
    inline: true,
    showOtherMonths: true,
    dayNamesMin: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
})

1 个答案:

答案 0 :(得分:0)

您可以使用&&逻辑运算符组合这两个条件。它需要传递所有条件才能显示插件的当前日期。我使用Array#contains而不是Array#indexOf因为它更容易理解。

// mock jQuery.datepicker.formatDate
const pad = x => x < 10 ? '0' + x : x
const jQuery = { datepicker: { formatDate: (format, date) => `${pad(date.getMonth() + 1)}-${pad(date.getDate())}` }}

function disableDays(date) {
    var day = date.getDate();
    var datestamp = jQuery.datepicker.formatDate('mm-dd', date)
    var specialDays = ["12-25", "01-01"]
    
    return (
         day !== 0
      && day !== 2
      && day !== 4
      && day !== 5
      && !specialDays.includes(datestamp)
    )
}

// test the functions
console.log(
  disableDays(new Date()) // depends on the day and date
)

console.log(
  disableDays(new Date('12-25-2017')) // expect false if not sun, tue, thur, fri
)

console.log(
  disableDays(new Date('12-26-2017')) // expect true
)
<script src="https://codepen.io/synthet1c/pen/KyQQmL.js"></script>