93 votes

jQuery Date Picker - désactiver les dates passées

J'essaie de sélectionner une plage de dates à l'aide du sélecteur de dates de l'interface utilisateur.

dans le champ "de/à", les personnes ne devraient pas être en mesure de visualiser ou de sélectionner des dates antérieures à la date actuelle.

Voici mon code :

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

Quelqu'un peut-il me dire comment désactiver les dates antérieures à la date actuelle ?

119voto

Nicola Peluchetti Points 38948

Vous devez créer un nouvel objet date et le définir en tant que minDate lorsque vous initialisez les sélecteurs de date

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

Modifier - à partir de votre commentaire, cela fonctionne comme prévu. http://jsfiddle.net/nicolapeluchetti/dAyzq/1/

2 votes

Je veux mettre en place un moyen pour que les gens ne puissent pas choisir une date qui a été passée comme hier, avant-hier, etc. Seulement à partir d'aujourd'hui.

1 votes

@HarshaMV j'ai mis à jour ma réponse, vous devez juste définir minDate lorsque vous initialisez les sélecteurs de date.

0 votes

Vous pouvez ajouter showAnim:"", aux paramètres du sélecteur de date pour supprimer les changements de mois et d'année gênants lorsque vous effectuez votre sélection.

80voto

Sachin Points 291

Déclarez la variable dateToday et utilisez la fonction Date() pour la définir puis utilisez cette variable pour l'assigner à minDate qui est le paramètre du datepicker.

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

C'est tout... La réponse ci-dessus était vraiment utile ... continuez comme ça les gars ...

0 votes

Une réponse claire et directe Merci.

49voto

Riya Travel Points 87
$('#datepicker-dep').datepicker({
    minDate: 0
});

minDate:0 fonctionne pour moi.

22voto

Mosin Points 511

Utilisez l'option "minDate" pour limiter la date la plus proche autorisée. La valeur "0" signifie aujourd'hui (0 jour à partir d'aujourd'hui) :

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

Docs ici : http://api.jqueryui.com/datepicker/#option-minDate

8voto

PålOliver Points 750

Juste pour ajouter à cela :

Si vous devez également empêcher l'utilisateur de taper manuellement une date dans le passé, c'est une solution possible. Voici ce que nous avons fini par faire (basé sur la réponse 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);
    }
});

Si l'utilisateur saisit manuellement une date antérieure, la valeur devient la date du jour.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X