Tengo un selector de fecha asignado a varios campos con una matriz de fechas específicas ya deshabilitadas en mi atributo beforeShowDay.

.datepicker({ beforeShowDay: disablePaymentDates, minDate: 0, maxDate: afterSixMonths });

Estoy intentando deshabilitar el mes de la fecha que el usuario selecciona en todos los seleccionadores de fechas. ¿Hay alguna forma de hacer esto?

0
Tyharo 27 dic. 2016 a las 17:15

3 respuestas

La mejor respuesta

Descubrí una solución similar a la de Roetnig. Agregué el siguiente código a la función que llama el atributo beforeShowDay.

var monthsToDisable= [];
if ($.inArray(date.getMonth(date), monthsToDisable) > -1) {
    $return = false;
    $returnclass = "unavailable";
} 

Luego lleno los 'monthsToDisable' con los meses apropiados (0-11). Dado que esta matriz se actualizará en función de la acción del usuario, simplemente tuve que volver a aplicar el selector de fecha después de actualizar la matriz.

0
Tyharo 27 dic. 2016 a las 18:55

Como se indica en la API datepicker:

beforeShowDay

Tipo: Función (Fecha fecha)

Predeterminado: nulo

Una función que toma una fecha como parámetro y debe devolver una matriz con:

[0] : verdadero / falso que indica si esta fecha es seleccionable o no [1] : un nombre de clase CSS para agregar a la celda de la fecha o "" para la presentación predeterminada [2] : información sobre herramientas emergente opcional para esta fecha

Se llama a la función para cada día en el selector de fecha antes de que se muestre.

.datepicker({
    minDate: 0, 
    maxDate: afterSixMonths,
    beforeShowDay: function(date) {
        var dd = date.getDate();
        if ($.inArray( dd, disablePaymentDates)!= -1) {
            return [false, "", "disabled" ];
        } else {
            return [true, "", "enabled" ];
        }
    }
});
1
roetnig 27 dic. 2016 a las 14:55

O puede deshabilitar el intervalo de fechas con el uso de moment.js

var disableRangeStartDate = '2017-10-29';
var disableRangeEndDate = '2018-04-18';

.datepicker({
isInvalidDate: function(arg){
      var thisMonth = arg._d.getMonth()+1;
      if (thisMonth<10){thisMonth = "0"+thisMonth;}
      var thisDate = arg._d.getDate();
      if (thisDate<10){thisDate = "0"+thisDate;}
      var thisYear = arg._d.getYear()+1900;
      var thisCompare = thisYear +"-"+ thisMonth +"-"+ thisDate;

     return moment(thisCompare).isBetween(disableRangeStartDate, disableRangeEndDate);
      }
}); 
0
Özgür Karagöz 9 jun. 2017 a las 07:51