使用日期字符串数组在bootstrap datepicker中设置禁用月数不起作用

我有一个datepicker,它具有以下配置:

HTML:

JS:

 var datesToDisable = ["2016-11-01","2016-08-01","2016-06-01", "2016-05-01","2016-04-01","2015-12-01","2015-09-01"]; $('#datepick').datepicker({ format: 'yyyy-mm-dd', minViewMode: 1, // 1 for months maxViewMode: 2, // 2 for years startDate: '-36m', endDate: '+0m', autoclose: true, toggleActive: true }); $('#datepick').datepicker('setDatesDisabled', datesToDisable); 

然后,异步调用将检索日期数组(此处由datesToDisable变量表示),这些日期数组使用setDatesDisabled方法传递给setDatesDisabled (如代码片段的最后一行所示),但它不起作用,因为月份对于已通过的日期仍可在日历中选择。

问题:这是在bootstrap datepicker日历中设置禁用月份的正确方法吗? 我是否需要在一个月内通过所有日期以禁用特定月份?

您可以在以下jsfiddle中查看它: http : //jsfiddle.net/javlc/52g9xcz2/

您可以使用.on("show").on("show")函数来更改显示。 我已经使用jQuery的grep来查找与datesToDisable数组匹配的datesToDisable 。 如果有任何匹配,那么我将disabled类应用于该元素。

 var datesToDisable = ["2016-11-01","2016-08-01","2016-06-01", "2016-05-01","2016-04-01","2015-12-01","2015-09-01"]; var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; $('#example1').datepicker({ format: 'yyyy-mm-dd', minViewMode: 1, // 1 for months maxViewMode: 2, // 2 for years startDate: '-36m', endDate: '+0m', autoclose: true, toggleActive: true}).on("show", function(event) { var year = $("th.datepicker-switch").eq(1).text(); // there are 3 matches $(".month").each(function(index, element) { var el = $(element); var hideMonth = $.grep( datesToDisable, function( n, i ) { return n.substr(0, 4) == year && months[parseInt(n.substr(5, 2)) - 1] == el.text(); }); if (hideMonth.length) el.addClass('disabled'); /* To hide them... if (hideMonth.length) el.hide(); */ }); }); 

JsFiddle示例: https ://jsfiddle.net/k144qmct/1/

Bootstrap setDatesDisabled仅接受dates setDatesDisabled接受months 。 我正在开发的一个解决方案如下:

首先,我们必须创建一个新数组: var dates=[]

对于来自datesToDisable数组的每个项目,我们需要push所有日期从项目month pushdates

 var datesToDisable = ["2016-11-01","2016-08-01","2016-06-01", "2016-05-01","2016-04-01","2015-12-01","2015-09-01"]; 

例如,我们有2016-11-01 。 您必须添加November(11)月的所有days

为此,我使用了daysInMonth方法来查找一个月的天数。

 function daysInMonth(month,year) { return new Date(year, month, 0).getDate(); } daysInMonth(2016,11,0) //30 

最后一步是pass 日期数组passdatesDisabled属性。

这是工作解决方案