Selector de fechas de jQuery: deshabilitar fechas pasadas

89

Estoy tratando de seleccionar un rango de fechas usando el selector de fechas de la interfaz de usuario.

en el campo desde / hasta la gente no debería poder ver o seleccionar fechas anteriores al día actual.

Este es mi codigo:

$(function() {
    var dates = $( "#from, #to" ).datepicker({
        defaultDate: "+1w",
        changeMonth: true,
        numberOfMonths: 1,
        onSelect: function( selectedDate ) {
            var option = this.id == "from" ? "minDate" : "maxDate",
                instance = $( this ).data( "datepicker" ),
                date = $.datepicker.parseDate(
                    instance.settings.dateFormat ||
                    $.datepicker._defaults.dateFormat,
                    selectedDate, instance.settings );
            dates.not( this ).datepicker( "option", option, date );
        }
    });
});

¿Alguien puede decirme cómo desactivar las fechas anteriores a la fecha actual?

Harsha MV
fuente

Respuestas:

112

Debe crear un nuevo objeto de fecha y configurarlo como minDatecuando inicializa los selectores de fechas

<label for="from">From</label> <input type="text" id="from" name="from"/> <label for="to">to</label> <input type="text" id="to" name="to"/>

var dateToday = new Date();
var dates = $("#from, #to").datepicker({
    defaultDate: "+1w",
    changeMonth: true,
    numberOfMonths: 3,
    minDate: dateToday,
    onSelect: function(selectedDate) {
        var option = this.id == "from" ? "minDate" : "maxDate",
            instance = $(this).data("datepicker"),
            date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
        dates.not(this).datepicker("option", option, date);
    }
});

Editar: desde su comentario ahora funciona como se esperaba http://jsfiddle.net/nicolapeluchetti/dAyzq/1/

Nicola Peluchetti
fuente
2
Quiero implementar una forma en que la gente no pueda elegir una fecha que haya pasado ... como ayer, día anterior, etc. Solo a partir de hoy.
Harsha MV
1
@HarshaMV actualicé mi respuesta, solo debe establecer minDate cuando inicialice los
selectores de fechas
Puede agregar showAnim:"",a la configuración del selector de fechas para eliminar los molestos cambios de mes y año cuando realiza su selección.
Misiu
Usé su secuencia de comandos, pero aparece el error "Error de referencia no detectado: $ no está definido". ¿cómo lo arreglaré?
mable george
@NicolaPeluchetti Esto es exactamente lo que necesito, pero ¿se puede usar en asp: Textbox? Lo intenté pero no funciona, ¿hay algún cambio específico que deba hacer? Gracias de antemano
wolfQueen
74

Declare la variable dateToday y use la función Date () para configurarla ... luego use esa variable para asignar a minDate, que es el parámetro de datepicker.

var dateToday = new Date(); 
$(function() {
    $( "#datepicker" ).datepicker({
        numberOfMonths: 3,
        showButtonPanel: true,
        minDate: dateToday
    });
});

Eso es todo ... La respuesta anterior fue realmente útil ... sigan así chicos ...

Sachin
fuente
Respuesta clara y sencilla ... Gracias
ASD
47
$('#datepicker-dep').datepicker({
    minDate: 0
});

minDate:0 funciona para mi.

Viaje a Riya
fuente
20

Utilice la opción "minDate" para restringir la fecha más temprana permitida. El valor "0" significa hoy (0 días a partir de hoy):

    $(document).ready(function () {
        $("#txtdate").datepicker({
            minDate: 0,
            // ...
        });
    });

Documentos aquí: http://api.jqueryui.com/datepicker/#option-minDate

Mosin
fuente
8

Solo para agregar a esto:

Si también necesita evitar que el usuario escriba manualmente una fecha en el pasado, esta es una posible solución. Esto es lo que terminamos haciendo (según la respuesta de @Nicola Peluchetti)

var dateToday = new Date();

$("#myDatePickerInput").change(function () {
    var updatedDate = $(this).val();
    var instance = $(this).data("datepicker");
    var date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, updatedDate, instance.settings);

    if (date < dateToday) {
        $(this).datepicker("setDate", dateToday);
    }
});

Lo que esto hace es cambiar el valor a la fecha de hoy si el usuario escribe manualmente una fecha en el pasado.

PålOliver
fuente
6

Demo en vivo , prueba esto

    $('#from').datepicker(
     { 
        minDate: 0,
        beforeShow: function() {
        $(this).datepicker('option', 'maxDate', $('#to').val());
      }
   });
  $('#to').datepicker(
     {
        defaultDate: "+1w",
        beforeShow: function() {
        $(this).datepicker('option', 'minDate', $('#from').val());
        if ($('#from').val() === '') $(this).datepicker('option', 'minDate', 0);                             
     }
   });
hari
fuente
5

Esta es una forma fácil de hacer esto

$('#datepicker').datepicker('setStartDate', new Date());

también podemos desactivar los días futuros

$('#datepicker').datepicker('setEndDate', new Date());
Sameera Prasad Jayasinghe
fuente
1
¡Gracias! Detuviste horas de frustración.
lmiguelvargasf
4

establezca el atributo startDate del selector de fechas, funciona, a continuación se muestra el código de trabajo

$(function(){
$('#datepicker').datepicker({
    startDate: '-0m'
    //endDate: '+2d'
}).on('changeDate', function(ev){
    $('#sDate1').text($('#datepicker').data('date'));
    $('#datepicker').datepicker('hide');
});
})
Anna
fuente
2

Documentación de la API de jQuery - datepicker

La fecha mínima seleccionable. Cuando se establece ennull , no hay mínimo.

Se admiten varios tipos:

Fecha: un objeto de fecha que contiene la fecha mínima.
Número: varios días a partir de hoy. Por ejemplo 2representa two daysdesde hoy y -1representa yesterday.
Cadena: una cadena en el formato definido por la dateFormatopción, o una fecha relativa.
Las fechas relativas deben contener pares de valor y período; los períodos válidos son ypara years, mpara months, wpara weeksy dpara days. Por ejemplo, +1m +7drepresenta one month and seven daysde today.

Para no mostrar fechas anteriores que no sean hoy

$('#datepicker').datepicker({minDate: 0});
Mohammad Faisal
fuente
2

El atributo " mindate " debe usarse para deshabilitar las fechas pasadas en jquery datepicker.

minDate: new Date () O minDate: '0' es la clave para esto.

Ex:

$(function() {
    $( "#datepicker" ).datepicker({minDate: new Date()});
});

O

$(function() {
  $( "#datepicker" ).datepicker({minDate: 0});
});
sreekanth
fuente
2

simplemente reemplace su código:

código antiguo:

$("#dateSelect").datepicker({
    showOtherMonths: true,
    selectOtherMonths: true,
    changeMonth: true,
    changeYear: true,
    showButtonPanel: true,
    dateFormat: 'yy-mm-dd'

});

nuevo código:

$("#dateSelect").datepicker({
    showOtherMonths: true,
    selectOtherMonths: true,
    changeMonth: true,
    changeYear: true,
    showButtonPanel: true,
    dateFormat: 'yy-mm-dd',
    minDate: 0
});
usuario5663780
fuente
2

Configurando startDate: new Date()

$('.date-picker').datepicker({
    defaultDate: "+1w",
    changeMonth: true,
    numberOfMonths: 1,
    ...
    startDate: new Date(),
});
kheengz
fuente
1

He creado una función para deshabilitar la fecha anterior, deshabilitar los días de fin de semana flexibles (como sábado, domingo)

Estamos usando el método beforeShowDay del plugin jQuery UI datepicker.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
var NotBeforeToday = function(date) {
		var now = new Date(); //this gets the current date and time
		if (date.getFullYear() == now.getFullYear() && date.getMonth() == now.getMonth() && date.getDate() >= now.getDate() && (date.getDay() > 0 && date.getDay() < 6) )
			return [true,""];
		if (date.getFullYear() >= now.getFullYear() && date.getMonth() > now.getMonth() && (date.getDay() > 0 && date.getDay() < 6))
			return [true,""];
		if (date.getFullYear() > now.getFullYear() && (date.getDay() > 0 && date.getDay() < 6))
			return [true,""];
		return [false,""];
	}


jQuery("#datepicker").datepicker({
		beforeShowDay: NotBeforeToday
    });

ingrese la descripción de la imagen aquí

Aquí la fecha de hoy es el 15 de septiembre. Tengo discapacitados el sábado y el domingo.

Smit Patadiya
fuente
0

tienes que declarar la fecha actual en variables como esta

 $(function() {
    var date = new Date();
    var currentMonth = date.getMonth();
    var currentDate = date.getDate();
    var currentYear = date.getFullYear();
    $('#datepicker').datepicker({
    minDate: new Date(currentYear, currentMonth, currentDate)
    });
})
hoga98
fuente
0
$( "#date" ).datetimepicker({startDate:new Date()}).datetimepicker('update', new Date());

new Date(): función obtener la fecha de hoy la fecha anterior está bloqueada. 100% funcionando

Muhammad Usman Nasir
fuente
0

simplemente puedes usar

startDate: 'today'

funciona bien para mí.

Moaz Ateeq
fuente