如何在jQuery Datepicker ui中阻止多个日期范围

时间:2016-04-25 19:14:26

标签: javascript jquery jquery-ui datepicker jquery-ui-datepicker

我有这个代码继续,但我想要的是阻止这些日期而不是启用。所以反过来说。 任何知道如何根据此代码执行此操作的人? 万分感谢!

var ranges = [ { start: new Date(2010, 8, 1), end: new Date(2010, 8, 20) },
               { start: new Date(2010, 9, 1), end: new Date(2010, 9, 20) },
               { start: new Date(2010, 10, 1), end: new Date(2010, 10, 20) } ];

$(function() {
  $("#datepicker").datepicker({
    numberOfMonths: 1,
    beforeShowDay: function(date) {
        for(var i=0; i<ranges.length; i++) {
          if(date >= ranges[i].start && date <= ranges[i].end) return [true, ''];
        }
        return [false, ''];
    },
    minDate: ranges[0].start,
    maxDate: ranges[ranges.length -1].end
  });
});​

另外,我的dateformat是dd-mm-yy。我对日期格式感到有些困惑。

1 个答案:

答案 0 :(得分:3)

您需要分别将return [true, '']return [false, '']更改为return [false, '']return [true, '']来撤销逻辑。您还需要删除minDate: ranges[0].startmaxDate: ranges[ranges.length -1].end

这是一个演示(我稍微改变了日期,以便更容易看到效果。请继续前进到2016年9月)。

var ranges = [ { start: new Date(2016, 8, 1), end: new Date(2016, 8, 20) },
               { start: new Date(2016, 9, 1), end: new Date(2016, 9, 20) },
               { start: new Date(2016, 10, 1), end: new Date(2016, 10, 20) } ];

$(function() {
  $("#datepicker").datepicker({
    numberOfMonths: 1,
    beforeShowDay: function(date) {
        for(var i=0; i<ranges.length; i++) {
          if(date >= ranges[i].start && date <= ranges[i].end) return [false, ''];
        }
        return [true, ''];
    }
  });
});
@import url(https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript" src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
<input type="text" id="datepicker">

修改

只需快速编辑即可解决日期问题。您的日期格式是非标准d(d)-m(m)-yyyy。通过将值[day,month,year]作为数字字符串(例如["4", "27", "2016"]用于27-4-2016),您可以非常轻松地将其转换为标准格式。这是一个做这个的片段

// our date-like string and an array equivalent
var d = '27-4-2016',
    dArray = d.split('-');
// rearrange the month and day
dArray.splice(1, 0, dArray.shift());
// create a date object called date and pass our array to the constructor
var date = new Date(dArray); // Result: Wed Apr 27 2016 00:00:00 GMT-0500 (CDT)