【问题标题】:JS Datepicker: Disable past dates + specific days of the week + specific datesJS Datepicker:禁用过去的日期+一周中的特定日期+特定日期
【发布时间】:2018-01-10 20:04:08
【问题描述】:

我在 JS 中有一个日期选择器,我在其中禁用了传递日期并且只允许这样的星期六:

$(document).ready(function(){
    $("#aankomstdatum").datepicker({
        dateFormat: "dd-mm-yy",
        numberOfMonths:2,
        minDate: 0,
        beforeShowDay: function(date){
        var day = date.getDay();
        return [day == 6];
    }});
});

我还有一个代码可以让我像这样禁用特定日期:

 /** Days to be disabled as an array */
var disableddates = ["26-05-2018"];

function DisableSpecificDates(date) {

 var m = date.getMonth();
 var d = date.getDate();
 var y = date.getFullYear();

 // First convert the date in to the mm-dd-yyyy format 
 // Take note that we will increment the month count by 1 
 var currentdate = (m + 1) + '-' + d + '-' + y ;

  // We will now check if the date belongs to disableddates array 
 for (var i = 0; i < disableddates.length; i++) {

 // Now check if the current date is in disabled dates array. 
 if ($.inArray(currentdate, disableddates) != -1 ) {
 return [false];
 }
 }
}

加上这个,就可以了:

beforeShowDay: DisableSpecificDates

我遇到的问题是我不能同时工作。我不确定如何禁用过去的日期和除星期六以外的所有日期,并且还禁用数组中的特定给定日期,而它们确实可以工作。例如,我总是在尝试时遇到语法错误:

    beforeShowDay: DisableSpecificDates, function(date){
    var day = date.getDay();
    return [day == 6];
}});

这可能吗?

【问题讨论】:

    标签: javascript jquery datepicker


    【解决方案1】:

    是的,有可能实现这一点。您想创建一个函数并从中返回[false],如果:

    1. date 是星期六或
    2. date 包含在 disableddates 数组中

    示例如下:

    var disableddates = ["26-04-2018"];
    
    function DisableDates(date) {
      var selectable = !isSaturday(date) && !isDateDisabled(date);
    
      return [selectable];
    }
    
    function isSaturday(date) {
      var day = date.getDay();
    
      return day === 6;
    }
    
    function isDateDisabled(date) {
      var m = date.getMonth() + 1;
      var d = date.getDate();
      var y = date.getFullYear();
    
      // First convert the date in to the dd-mm-yyyy format
      if(d < 10) d = '0' + d;
      if(m < 10) m = '0' + m;
    
      var currentdate = d + '-' + m + '-' + y;
    
      // Check if disableddates array contains the currentdate
      return disableddates.indexOf(currentdate) >= 0;
    }
    

    然后将DisableDates 函数作为beforeShowDay 选项的值传递:

    $("#aankomstdatum").datepicker({
      dateFormat: "dd-mm-yy",
      numberOfMonths:2,
      minDate: 0,
      beforeShowDay: DisableDates
    });
    

    【讨论】:

    • 感谢您的帮助!我在您的代码中看到了逻辑,但我无法让它看起来有效。这是我试过的一个 JS Fiddle:jsfiddle.net/qrnaszqz 谢谢你的帮助!
    • @KevinVerhoeven 您必须添加外部资源(您的日期选择器插件)。现在它失败了,因为 $(...).datepicker 未定义。
    • 抱歉回复晚了!我进行了相应的调整:jsfiddle.net/qrnaszqz/1 只要我取消注释“beforeShowDay: DisableDates”,日历就不再工作了。评论时,它确实有效。那么某处可能存在错误?
    • @KevinVerhoeven 我已经更新了答案,示例代码现在应该可以工作了。这是小提琴:jsfiddle.net/7y28td3r.
    • 谢谢!现在可以了。感谢您坚持寻找解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多