jQuery Date Picker - disabilita le date passate


89

Sto cercando di selezionare un intervallo di date utilizzando il selettore di date dell'interfaccia utente.

nel campo da / a le persone non dovrebbero essere in grado di visualizzare o selezionare date precedenti ai giorni nostri.

Questo è il mio codice:

$(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 );
        }
    });
});

Qualcuno può dirmi come disabilitare le date precedenti alla data attuale.

Risposte:


112

È necessario creare un nuovo oggetto data e impostarlo come minDatequando si inizializzano i datepicker

<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);
    }
});

Modifica: dal tuo commento ora funziona come previsto http://jsfiddle.net/nicolapeluchetti/dAyzq/1/


2
Voglio implementare un modo in cui le persone non dovrebbero essere in grado di scegliere una data che è stata trascorsa .. come ieri l'altro, ecc. Solo da oggi in poi.
Harsha MV

1
@HarshaMV ho aggiornato la mia risposta, dovresti semplicemente impostare minDate quando inizializzi i datepicker
Nicola Peluchetti

È possibile aggiungere showAnim:"",alle impostazioni di Datepicker per rimuovere il fastidioso cambio di mese e anno quando si effettua la selezione.
Misiu

Ho usato il tuo script, ma ricevo l'errore "Uncaught ReferenceError: $ non è definito". come lo risolverò?
mable george

@NicolaPeluchetti Questo è esattamente ciò di cui ho bisogno, ma può essere utilizzato in asp: Textbox? Ho provato ma non funziona, c'è qualche modifica specifica che dovrei fare? Grazie in anticipo
WolfQueen

74

Dichiarare la variabile dateToday e utilizzare la funzione Date () per impostarla .. quindi utilizzare quella variabile per assegnare a minDate che è il parametro di datepicker.

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

Ecco fatto ... La risposta sopra è stata davvero utile ... continuate così ragazzi ..


Risposta chiara e diretta .. Grazie
ASD

47
$('#datepicker-dep').datepicker({
    minDate: 0
});

minDate:0 per me va bene.



8

Solo per aggiungere a questo:

Se devi anche impedire all'utente di digitare manualmente una data passata, questa è una possibile soluzione. Questo è quello che abbiamo finito per fare (sulla base della risposta di @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);
    }
});

Ciò che fa è modificare il valore sulla data odierna se l'utente digita manualmente una data nel passato.


6

Demo dal vivo , prova questo,

    $('#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);                             
     }
   });

5

Questo è un modo semplice per farlo

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

inoltre possiamo disabilitare i giorni futuri

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

1
Grazie! Hai fermato ore di frustrazione.
lmiguelvargasf

4

imposta l'attributo startDate di datepicker, funziona, di seguito è riportato il codice funzionante

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

2

Documentazione API jQuery - datepicker

La data minima selezionabile. Quando è impostato su null, non esiste un minimo.

Tipi multipli supportati:

Data: un oggetto data contenente la data minima.
Numero: un numero di giorni da oggi. Ad esempio 2rappresenta two daysda oggi e -1rappresenta yesterday.
Stringa: una stringa nel formato definito dateFormatdall'opzione o una data relativa.
Le date relative devono contenere coppie di valori e periodi; periodi validi sono yper years, mper months, wper weekse dper days. Ad esempio, +1m +7drappresenta one month and seven daysda today.

Per non visualizzare date precedenti diverse da quella odierna

$('#datepicker').datepicker({minDate: 0});

2

L' attributo " mindate " dovrebbe essere utilizzato per disabilitare le date trascorse in jquery datepicker.

minDate: new Date () o minDate: "0" è la chiave per questo.

Ex:

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

O

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

2

basta sostituire il codice:

vecchio codice:

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

});

nuovo codice:

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

2

IMPOSTANDO startDate: new Date()

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

1

Ho creato una funzione per disabilitare la data precedente, disabilitare i giorni flessibili del fine settimana (come sabato, domenica)

Stiamo utilizzando beforeShowDay metodo di jQuery UI plug 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
    });

inserisci qui la descrizione dell'immagine

Qui la data odierna è il 15 settembre. Ho disabilitato sabato e domenica.


0

devi dichiarare la data corrente in variabili come questa

 $(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)
    });
})

0
$( "#date" ).datetimepicker({startDate:new Date()}).datetimepicker('update', new Date());

new Date(): la funzione ottiene la data odierna la data precedente è bloccata. Funzionante al 100%


0

puoi semplicemente usare

startDate: 'today'

funziona bene per me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.