问题
I want to disable specific date range in bootstrap daterangepicker.
I need to use bootstrap daterangepicker which provides me the option of restricting the specific date range.
回答1:
To disable dates, use datesDisabled method to provide an array.
Some dates are disabled in this CodePen.
$("#picker").datepicker({
datesDisabled:["11/24/2016","11/28/2016","12/02/2016","12/23/2016"]
});
EDIT
Previous answer was for Bootstap DatePicker...
Sorry for the misreading, my bad.
Here is what I have found for Bootstrap DateRangePicker:
// Define the disabled date array
var disabledArr = ["11/24/2016","11/28/2016","12/02/2016","12/23/2016"];
$("#picker").daterangepicker({
isInvalidDate: function(arg){
console.log(arg);
// Prepare the date comparision
var thisMonth = arg._d.getMonth()+1; // Months are 0 based
if (thisMonth<10){
thisMonth = "0"+thisMonth; // Leading 0
}
var thisDate = arg._d.getDate();
if (thisDate<10){
thisDate = "0"+thisDate; // Leading 0
}
var thisYear = arg._d.getYear()+1900; // Years are 1900 based
var thisCompare = thisMonth +"/"+ thisDate +"/"+ thisYear;
console.log(thisCompare);
if($.inArray(thisCompare,disabledArr)!=-1){
console.log(" ^--------- DATE FOUND HERE");
return true;
}
}
}).focus();
This is working in this CodePen.
EDIT for the bonus question in comments ;)
Above, is to draw the calendar with disabled dates.
Now, what you need is to compare the selected range again, on Apply (when user has selected a range), to disallow a range that would include some disabled dates.
So here is an additional function:
$("#picker").on("apply.daterangepicker",function(e,picker){
// Get the selected bound dates.
var startDate = picker.startDate.format('MM/DD/YYYY')
var endDate = picker.endDate.format('MM/DD/YYYY')
console.log(startDate+" to "+endDate);
// Compare the dates again.
var clearInput = false;
for(i=0;i<disabledArr.length;i++){
if(startDate<disabledArr[i] && endDate>disabledArr[i]){
console.log("Found a disabled Date in selection!");
clearInput = true;
}
}
// If a disabled date is in between the bounds, clear the range.
if(clearInput){
// To clear selected range (on the calendar).
var today = new Date();
$(this).data('daterangepicker').setStartDate(today);
$(this).data('daterangepicker').setEndDate(today);
// To clear input field and keep calendar opened.
$(this).val("").focus();
console.log("Cleared the input field...");
// Alert user!
alert("Your range selection includes disabled dates!");
}
});
See the improved CodePen here.
回答2:
Louys Patrice Bessette's answer is awesome.
I just want to make it more accurate because I found 1 bug that it not alert when you choose start date and end date in different month and disabled date in between them. The reason is here
startDate<disabledArr[i] && endDate>disabledArr[i]
you need to parse to Date Object before comparing or it will be false like this
startDate = new Date(picker.startDate.format('MM/DD/YYYY'))
endDate = new Date(picker.endDate.format('MM/DD/YYYY'))
similar to disabled date in disableArr
Thank you
来源:https://stackoverflow.com/questions/40670141/how-to-disable-specific-date-range-in-bootstrap-daterangepicker