代码之家  ›  专栏  ›  技术社区  ›  James

jqueryui:日期选择器的多个范围?

  •  8
  • James  · 技术社区  · 14 年前

    我想为我的项目使用jQueryUIDatePicker,但是我需要能够有多个不相交的有效日期范围。不在这些范围内的日期不应该是可选的。

     $(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 回复  |  直到 8 年前
        1
  •  22
  •   Nick Craver    14 年前

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

    You can give it a try here


    或者,对于任意数量的日期范围,这里有一种效率稍低但更灵活的方法:

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

    You can give this version a try here ,只需按时间顺序排列范围:)