es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Restringiendo fechas en el calendario de Gravity Forms.

Consulta sobre cómo agregar lógica a un campo de fecha (calendario) en gravity forms.

Quiero deshabilitar los días pasados, los fines de semana y solo habilitar la fecha de hoy + 3 días (excluyendo los fines de semana). Esto es lo que he creado:

<script type="text/javascript">
    gform.addFilter('gform_datepicker_options_pre_init', function(optionsObj, formId, fieldId) {
        if (formId == 16 && fieldId == 1) {
            optionsObj.firstDay = 1;
            optionsObj.beforeShowDay = jQuery.datepicker.noWeekends;
            optionsObj.minDate = 0;
            optionsObj.maxDate = '+3 D';
        }
        return optionsObj;
    });
</script>

El único problema, como se puede ver en la captura de pantalla también, es que los próximos 3 días laborables no están activos. También está contando los fines de semana. Idealmente, las fechas activas deberían ser el 22, 23, 24 y 27. ¿Cómo puedo hacer cambios aquí? ¿Algún consejo? ¡Gracias de antemano!

screenshot

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para realizar los cambios en el código y habilitar solo la fecha de hoy más 3 días (excluyendo los fines de semana), puede modificar la opción “beforeShowDay”. En lugar de utilizar “noWeekends”, puede definir una función personalizada que verifique cada día y deshabilite los días pasados, los fines de semana y los próximos tres días laborables. Aquí tienes un ejemplo:

    <script type="text/javascript">
    gform.addFilter( 'gform_datepicker_options_pre_init', function( optionsObj, formId, fieldId ) {
        if ( formId == 16 && fieldId == 1 ) {
            optionsObj.firstDay = 1;
            optionsObj.beforeShowDay = function(date) {
                // deshabilitar los días pasados
                if (date < new Date()) { return [false]; }
                // deshabilitar los fines de semana
                var dayOfWeek = date.getDay();
                if (dayOfWeek === 0 || dayOfWeek === 6) { return [false]; }
                // deshabilitar los próximos tres días laborables
                var today = new Date();
                var delta = 3;
                while (delta > 0) {
                    today.setDate(today.getDate() + 1);
                    dayOfWeek = today.getDay();
                    if (dayOfWeek !== 0 && dayOfWeek !== 6) {
                        delta--;
                    }
                }
                if (date > today) { return [false]; }
                // habilitar todos los demás días
                return [true];
            };
            optionsObj.minDate = 0;
            optionsObj.maxDate = '+3 D';
        }
        return optionsObj;
    });
    </script>
    

    Este código deshabilitará los días pasados y los fines de semana como antes, pero también verificará los próximos tres días laborables y los deshabilitará también. La variable “today” se establece en la fecha actual, y luego el código recorre los próximos tres días y verifica si son días laborables (no fines de semana). Si lo son, el bucle decrementa “delta” (el número de días restantes para deshabilitar) y si “delta” alcanza cero, el bucle se detiene. Por último, el código verifica si la fecha actual es posterior al final del rango de fechas habilitadas (la fecha de hoy +3 días) y la deshabilita si es así.

    Con estos cambios, el código solo permitirá que las fechas activas sean el 22, 23, 24 y 27 (excluyendo los fines de semana).

Comments are closed.