En este caso les mostraré una función que permite al Datepicker deshabilitar rangos de fechas que no sean necesarios mostrar o tan solo fechas en particular (como días festivos).
var RangeDatesIsDisable = true;
function DisableDays(date) {
var isd = RangeDatesIsDisable;
var rd = RangeDates;
var m = date.getMonth();
var d = date.getDate();
var y = date.getFullYear();
for (i = 0; i < rd.length; i++) {
var ds = rd[i].split(',');
var di, df;
var m1, d1, y1, m2, d2, y2;
if (ds.length == 1) {
di = ds[0].split('/');
m1 = parseInt(di[0]);
d1 = parseInt(di[1]);
y1 = parseInt(di[2]);
if (y1 == y && m1 == (m + 1) && d1 == d) return [!isd];
} else if (ds.length > 1) {
di = ds[0].split('/');
df = ds[1].split('/');
m1 = parseInt(di[0]);
d1 = parseInt(di[1]);
y1 = parseInt(di[2]);
m2 = parseInt(df[0]);
d2 = parseInt(df[1]);
y2 = parseInt(df[2]);
if (y1 >= y || y <= y2) {
if ((m + 1) >= m1 && (m + 1) <= m2) {
if (m1 == m2) {
if (d >= d1 && d <= d2) return [!isd];
} else if (m1 == (m + 1)) {
if (d >= d1) return [!isd];
} else if (m2 == (m + 1)) {
if (d <= d2) return [!isd];
} else return [!isd];
}
}
}
}
return [isd];
}
Esta función conlleva dos parametros a configurar.
“RangeDates”: Este parámetro acepta Arrays de String los cuales contienen los rangos de fechas o fechas en especifico que deshabilitara el Datepicker, las fechas deben de ir en formato “MM/dd/yyyy”, los rangos de fecha inicial y fecha final van separados por coma, las fechas especificas van individual.
“RangeDatesIsDisable”: Este parámetro acepta un booleano que indica si las fechas especificadas en el “RangeDates” son las que se deshabilitan (true), o (false) si se requiere que todas las demas fechas se deshabiliten excepto las indicadas en el “RangeDates”.
Esta función es especificada en el evento del Datepicker llamado “beforeShowDay”, ejemplo:
maxDate: 0,
minDate: null,
beforeShowDay: DisableDays
});
Solo incluyen la funcion “DisableDays” en la página donde lo requieran y modifican las fechas.
Tambien les déjo la versión minimizada para que la utilicen en el deployment.
//The first date is the initial range and the second is the final range
//If only one date is specified, it's taken as a holiday
var RangeDates=["2/2/2011, 2/10/2011","2/12/2011, 2/20/2011","4/20/2011, 5/15/2011","3/29/2011"];var RangeDatesIsDisable=true;
function DisableDays(date){var isd=RangeDatesIsDisable;var rd=RangeDates;var m=date.getMonth();var d=date.getDate();var y=date.getFullYear();for(i=0;i<rd.length;i++){var ds=rd[i].split(",");var di,df;var m1,d1,y1,m2,d2,y2;if(ds.length==1){di=ds[0].split("/");m1=parseInt(di[0]);d1=parseInt(di[1]);y1=parseInt(di[2]);if(y1==y&&m1==m+1&&d1==d)return[!isd]}else if(ds.length>1){di=ds[0].split("/");df=ds[1].split("/");m1=parseInt(di[0]);d1=parseInt(di[1]);y1=parseInt(di[2]);m2=parseInt(df[0]);d2=parseInt(df[1]);y2=parseInt(df[2]);if(y1>=y||y<=y2)if(m+1>=m1&&m+1<=m2)if(m1==m2){if(d>=d1&&d<=d2)return[!isd]}else if(m1==m+1){if(d>=d1)return[!isd]}else if(m2==m+1){if(d<=d2)return[!isd]}else return[!isd]}}return[isd]};