Estate atento porque en este post vas a encontrar el arreglo que buscas.
Solución:
Según la API Datepicker de jQueryUI,
Esto explica por qué
$("#dateRetrait").datepicker(beforeShowDay: function(d)
console.log("bsd");
alert("bsd");
);
No funciona.
También noté que estás llamando. .datepicker()
varias veces y cada vez le estás dando diferentes parámetros.
En lugar de:
$("#dateRetrait").datepicker();
$("#dateRetrait").datepicker(beforeShowDay: function(d)
console.log("bsd");
alert("bsd");
);
$('#dateRetrait').datepicker('option', 'minDate', new Date());
$("#dateRetrait").datepicker("option","dateFormat", 'dd-mm-yy');
Intenta hacer esto:
$("#dateRetrait").datepicker(
dateFormat: 'dd-mm-yy',
minDate: new Date(),
beforeShowDay: function(d)
var dmy = (d.getMonth()+1);
if(d.getMonth()<9)
dmy="0"+dmy;
dmy+= "-";
if(d.getDate()<10) dmy+="0";
dmy+=d.getDate() + "-" + d.getFullYear();
console.log(dmy+' : '+($.inArray(dmy, availableDates)));
if ($.inArray(dmy, availableDates) != -1)
return [true, "","Available"];
else
return [false,"","unAvailable"];
);
También le proporcioné una demostración: http://jsfiddle.net/yTMwu/18/ . ¡Espero que esto ayude!
La fecha que se pasa a la función de devolución de llamada es una fecha y hora completa. Entonces, si desea que se compare con una fecha corta string, uno de ellos debe ser convertido. Este fragmento del beforeShowDay attribute parte del selector de fecha demuestra que es necesaria una conversión. Aquí simplemente deshabilito una sola fecha en el calendario para probar el punto.
beforeShowDay: function(date)
var dd = date.getDate();
var mm = date.getMonth()+1; //January is 0!
var yyyy = date.getFullYear();
var shortDate = mm+'/'+dd+'/'+yyyy;
var test = "12/30/2014";
if (shortDate == test)
return [false, "" ];
else
return [true, "" ];
Dom dio una buena explicación. Y me gustaría agregar más código acortado:
Si usted tiene array de fechas disponibles en formato: 0000-00-00 (aaaa-mm-dd)
var availableDates = ["2020-01-05", "2020-01-10", "2020-01-14"];
$("#dateRetrait").datepicker(
dateFormat: 'dd-mm-yy',
minDate: new Date(),
beforeShowDay: function(d)
var year = d.getFullYear(),
month = ("0" + (d.getMonth() + 1)).slice(-2),
day = ("0" + (d.getDate())).slice(-2);
var formatted = year + '-' + month + '-' + day;
if ($.inArray(formatted, availableDates) != -1)
return [true, "","Available"];
else
return [false,"","unAvailable"];
);
antes del ShowDay - funciona cada vez, antes del día de procesamiento))
$.inArray - encontrar valor en array (-1 si no hay valor)
En esta solución, puede hacer fechas de paradasolo cambia de línea:
if ($.inArray(formatted, availableDates) != -1) {
para
if ($.inArray(formatted, availableDates) == -1) {