JQuery UI: несколько диапазонов для выбора даты? - PullRequest
8 голосов
/ 17 августа 2010

Я хочу использовать указатель даты jQuery-ui для своего проекта, но мне нужно иметь возможность иметь несколько непересекающихся диапазонов допустимых дат. Даты, не входящие в один из этих диапазонов, не должны выбираться.

 $(function() {
 $("#datepicker").datepicker({
   numberOfMonths: 1,
   minDate: new Date(2010, 8, 1), //range 1
   maxDate: new Date(2010, 8, 20) //range 1
   minDate: new Date(2010, 9, 1), //range 2
   maxDate: new Date(2010, 9, 20) //range 2
 });
 });

Как бы я поступил в реализации этого? Буду признателен за любую помощь.

1 Ответ

22 голосов
/ 17 августа 2010

Вы можете использовать beforeShowDay для ограничения диапазона при отображении месяцев, например:

var d1s = new Date(2010, 8, 1),
    d1e = new Date(2010, 8, 20),
    d2s = new Date(2010, 9, 1),
    d2e = new Date(2010, 9, 20);

$(function() {
  $("#datepicker").datepicker({
    numberOfMonths: 1,
    beforeShowDay: function(date) {
      return [(date >= d1s && date <= d1e || date >= d2s && date <= d2e), ''];
    },
    minDate: d1s,
    maxDate: d2e
  });
});​

Вы можете попробовать здесь


Или, вот немного менее эффективный, но более гибкий подход для любого числа диапазонов дат:

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
  });
});​

Вы можете попробовать эту версию здесь , просто поместите диапазоны в хронологическом порядке:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...