【发布时间】:2015-08-01 10:28:17
【问题描述】:
我有一个 jQuery 日期选择器,我需要执行以下操作:
- 禁用特定日期范围内的所有星期日
我知道我需要使用 beforeShowDay 函数,但似乎无法使用 Stack Overflow 上的其他答案和示例来实现它。
任何帮助都会很棒。
丹
【问题讨论】:
标签: javascript jquery datepicker jquery-ui-datepicker uidatepicker
我有一个 jQuery 日期选择器,我需要执行以下操作:
我知道我需要使用 beforeShowDay 函数,但似乎无法使用 Stack Overflow 上的其他答案和示例来实现它。
任何帮助都会很棒。
丹
【问题讨论】:
标签: javascript jquery datepicker jquery-ui-datepicker uidatepicker
如果它是一组静态的星期天,您可以简单地使用一个包含您想要禁用的日期的数组 [取自 Jquery UI datepicker. Disable array of Dates]:
var array = ["2013-03-14","2013-03-15","2013-03-16"]
$('input').datepicker({
beforeShowDay: function(date){
var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
return [ array.indexOf(string) == -1 ]
}
});
如果要创建一组动态的星期日,则必须创建一个函数来获取从开始日期和结束日期开始的星期日数组。
这里有一个函数可以做到这一点:
function addSundaysToArray(fromDate, toDate, datesToDisable){
fromDate = new Date(fromDate);
toDate = new Date(toDate);
while(fromDate < toDate){
fromDate.setDate(fromDate.getDate() + 1);
if(fromDate.getDay() === 0){
var year = fromDate.getFullYear();
var month = fromDate.getMonth() + 1;
month = (month + '').length == 1 ? '0' + month : month;
var day = fromDate.getDate();
day = (day + '').length == 1 ? '0' + day : day;
datesToDisable.push(year + "-" + month + "-" + day);
}
}
}
显然你可以在这里使用实际的日期对象,甚至毫秒。或者你可以跳过函数的数组输入,只返回一个包含日期的数组。
我选择将日期表示为 yyyy-mm-dd,因为大多数时候人类读取这些数组,最好让它们可读。当然,如果可读性对您来说不是那么重要,您可以将日期保留为您喜欢的任何格式。
【讨论】: