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

89

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 doivent pas pouvoir afficher ou sélectionner des dates antérieures à aujourd'hui.

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.

Harsha MV
la source

Réponses:

112

Vous devez créer un nouvel objet de date et le définir comme minDatelorsque 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 maintenant comme prévu http://jsfiddle.net/nicolapeluchetti/dAyzq/1/

Nicola Peluchetti
la source
2
Je veux mettre en œuvre une manière que les gens ne devraient pas être en mesure de choisir une date qui a été passée .. comme hier, avant, etc. Seulement à partir d'aujourd'hui et en avant.
Harsha MV
1
@HarshaMV j'ai mis à jour ma réponse, vous devriez simplement définir minDate lorsque vous initialisez les sélecteurs de date
Nicola Peluchetti
Vous pouvez ajouter showAnim:"",aux paramètres de datepicker pour supprimer le changement de mois et d'année ennuyeux lorsque vous faites votre sélection.
Misiu
J'ai utilisé votre script, mais j'obtiens l'erreur "Uncaught ReferenceError: $ is not defined". comment vais-je résoudre ce problème?
mable george
@NicolaPeluchetti C'est exactement ce dont j'ai besoin, mais cela peut-il être utilisé dans asp: Textbox? J'ai essayé mais ça ne fonctionne pas, y a-t-il des changements spécifiques que je devrais faire? Merci d'avance
wolfQueen
74

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 de 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 ...

Sachin
la source
Réponse claire et directe .. Merci
ASD
47
$('#datepicker-dep').datepicker({
    minDate: 0
});

minDate:0 travaille pour moi.

Voyage Riya
la source
20

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

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

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

Mosin
la source
8

Juste pour ajouter à ceci:

Si vous devez également empêcher l'utilisateur de saisir manuellement une date dans le passé, c'est une solution possible. C'est 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);
    }
});

Cela change la valeur de la date du jour si l'utilisateur tape manuellement une date dans le passé.

PålOliver
la source
6

Démo en direct , essayez ceci,

    $('#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
la source
5

C'est un moyen facile de le faire

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

nous pouvons également désactiver les jours futurs

$('#datepicker').datepicker('setEndDate', new Date());
Sameera Prasad Jayasinghe
la source
1
Je vous remercie! Vous avez arrêté des heures de frustration.
lmiguelvargasf
4

définir l'attribut startDate de datepicker, cela fonctionne, voici le code de travail

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

Documentation de l'API jQuery - datepicker

La date minimale sélectionnable. Lorsqu'il est réglé sur null, il n'y a pas de minimum.

Plusieurs types pris en charge:

Date: un objet de date contenant la date minimale.
Nombre: un certain nombre de jours à partir d'aujourd'hui. Par exemple 2représente à two dayspartir d'aujourd'hui et -1représente yesterday.
Chaîne: une chaîne au format défini par l' dateFormatoption ou une date relative.
Les dates relatives doivent contenir des paires valeur et période; les périodes valides sont ypour years, mpour months, wpour weekset dpour days. Par exemple, +1m +7dreprésente one month and seven daysde today.

Afin de ne pas afficher les dates précédentes autres que celles d'aujourd'hui

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

L' attribut " mindate " doit être utilisé pour désactiver les dates passées dans jquery datepicker.

minDate: new Date () Ou minDate: '0' est la clé pour cela.

Ex:

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

OU

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

remplacez simplement votre code:

ancien code:

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

});

nouveau code:

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

En définissant startDate: new Date()

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

J'ai créé une fonction pour désactiver la date précédente, désactiver les jours de week-end flexibles (comme samedi, dimanche)

Nous utilisons la méthode beforeShowDay du 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
    });

entrez la description de l'image ici

Ici, la date d'aujourd'hui est le 15 septembre. J'ai désactivé samedi et dimanche.

Smit Patadiya
la source
0

vous devez déclarer la date actuelle dans des variables comme celle-ci

 $(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
la source
0
$( "#date" ).datetimepicker({startDate:new Date()}).datetimepicker('update', new Date());

new Date(): fonction obtenir la date d'aujourd'hui la date précédente sont verrouillées. 100% de travail

Muhammad Usman Nasir
la source
0

vous pouvez simplement utiliser

startDate: 'today'

cela fonctionne bien pour moi.

Moaz Ateeq
la source