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

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

此外,我的日期格式是 dd-mm-yy。我对日期格式有点困惑。

最佳答案

您需要通过将 return [true, '']return [false, ''] 更改为 return [false, '' ] 分别返回 [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)

关于javascript - 如何在 jQuery Datepicker ui 中阻止多个日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36849199/

相关文章:

javascript - Safari Mobile - 崩溃 - 三个 JS 纹理未加载

javascript - 结果中带有 range.variable 的 Angular ng-attr- 表达式

javascript - 后台函数javascript

jquery - 如何让 jQuery UI 的 Draggable 和 Sortable 功能在 Android 浏览器上运行?

javascript - 脚本加载冲突?包含 Adob​​e Edge Animation 时对象没有方法错误

php - 任何方法都可以知道页面是否是通过 AJAX 调用的

javascript - for循环只循环一次

Javascript - <a href></a> 内部警报

jquery - 如何在 jQuery 中选择特定元素

jquery - 如何反转 JQuery 动画