2009-11-23 5 views
73

Comment désactiver les dates antérieures sur jQuery datepicker? J'ai cherché des options, mais ne semble pas trouver quelque chose qui indique la possibilité de désactiver les dates passées.jQuery datepicker pour empêcher la date antérieure

MISE À JOUR: Merci pour la réponse rapide. J'ai essayé ça sans aucune chance. Les jours n'étaient toujours pas grisés comme prévu et acceptent toujours la date passée sélectionnée.

J'ai essayé ceci:

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

ne fonctionne pas.

J'ai essayé ceci:

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

ne fonctionne toujours pas non plus.

Il affiche très bien le widget du calendrier. Il ne sera tout simplement pas gris ou empêcher l'entrée des jours passés. J'ai essayé minDate et maxDate dans le passé sans aucune chance, alors j'ai pensé que ça ne devait pas être eux.

Répondre

33

Vous avez juste besoin de spécifier une date minimum - le mettre à 0 signifie que la date minimale est 0 jour à partir d'aujourd'hui, c'est-à-dire aujourd'hui. Vous pouvez passer la chaîne '0d' à la place (l'unité par défaut est jours).

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

Essayez de définir startDate à la date du jour. Par exemple:

$('.date-pick').datePicker({startDate:'01/01/1996'}); 
+0

On dirait que c'est pour le sélecteur de date de Kevin Luck pas le standard JQuery un – salonMonsters

135

Essayez ceci:

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

Retirez les citations de 0.

+0

Cela a fonctionné très bien! –

+0

Ceci devrait être la réponse acceptée. – BWDesign

+4

@BWDesign A répondu un an et demi plus tard que moi;) –

9

Cela fonctionne:

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

Cette solution fonctionne en effet! – Michiel

2

J'utilise le code suivant pour formater la date et afficher 2 mois dans le calendrier ...

<script> 
$(function() { 

    var dates = $("#from, #to").datepicker({ 

     showOn: "button", 
     buttonImage: "imgs/calendar-month.png", 
     buttonImageOnly: true,       
     defaultDate: "+1w", 
     changeMonth: true, 
     numberOfMonths: 2, 

     onSelect: function(selectedDate) { 




      $(".selector").datepicker({ defaultDate: +7 }); 
      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", "dateFormat", 'yy-mm-dd'); 


     } 
    }); 
}); 

</script> 

Le problème est que je ne suis pas sûr de savoir comment limiter les dates précédentes sélection.

23

Supprimez les guillemets entourant 0 et cela fonctionnera.

Code du travail Snippet:

// set minDate to 0 for today's date 
 
$('#datepicker').datepicker({ minDate: 0 });
body { 
 
    font-size: 12px; /* just so that it doesn't default to 16px (which is kinda huge) */ 
 
}
<!-- load jQuery and jQuery UI --> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script> 
 

 
<!-- load jQuery UI CSS theme --> 
 
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css"> 
 

 
<!-- the datepicker input --> 
 
<input type='text' id='datepicker' placeholder='Select date' />

+1

Une explication de la raison pour laquelle une virgule est nécessaire? Je peux l'enlever et tout fonctionne encore correctement. Y a-t-il un navigateur qui nécessite une virgule pour un seul objet de propriété? – schickm

+0

Vous n'avez besoin de virgules que si vous utilisez plusieurs options, par ex. $ ('# datepicker'). Datepicker ({minDate: 0, maxDate: "+ 1M + 10D", dateFormat: 'yy-mm-dd'}); ' Vous n'avez pas besoin d'une virgule après la dernière l'option – Tanvir

+1

vous envoyez un objet à la méthode. une virgule sur la dernière valeur est incorrecte. –

1

Assurez-vous que vous mettez plusieurs propriétés dans la même ligne (puisque vous ne montriez 1 ligne de code, vous avez peut-être eu le même problème J'ai fait).

Mine définirait la date par défaut, mais n'a pas grisé les anciennes dates.Cela ne fonctionne pas:

$('#date_end').datepicker({ defaultDate: +31 }) 
$('#date_end').datepicker({ minDate: 1 }) 

Cela fait à la fois:

$('#date_end').datepicker({ defaultDate: +31, minDate: 1 }) 

1 et +1 travail le même (ou 0 et 0 dans votre cas).

Me: Windows 7 x64, Rails 3.2.3, Ruby 1.9.3

22

Si vous faites affaire avec un sélecteur de date limite précédemment, puis la mise en

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

ne fonctionnera pas. Cette syntaxe est applicable uniquement lorsque vous créez le widget.

Pour définir la date min pour un sélecteur de date limite utiliser les éléments suivants:

$("#datePicker").datepicker("option", "minDate", 0); 
+1

merci pour cette solution précédemment liée – stackoverfloweth

+1

Merci.J'ai perdu beaucoup de temps à trouver cette solution et cela a résolu mon problème. – Rushan

1
var givenStartDate = $('#startDate').val(); 
     alert('START DATE'+givenStartDate); 
     var givenEndDate = $('#endDate').val(); 
     alert('END DATE'+givenEndDate); 
     var date = new Date(); 
     var month = date.getMonth()+1; 
     var day = date.getDate(); 
     var currentDate = date.getFullYear() + '-' + 
      (month<10 ? '0' : '') + month + '-' + 
      (day<10 ? '0' : '') + day; 
     if(givenStartDate < currentDate || givenEndDate < currentDate) 
     { 
     $("#updateButton").attr("disabled","disabled"); 
     } 
     if(givenStartDate < currentDate && givenEndDate > currentDate) 
      { 
      $("#updateButton").attr("enabled","enabled"); 
      } 
     if(givenStartDate > currentDate || givenEndDate > currentDate) { 
     $("#updateButton").attr("enabled","enabled"); 
     } 

essayer. Si une erreur, s'il vous plaît corrigez-moi :) Merci à tous.

7

// disable dates futures

$('#datetimepicker1').datetimepicker({ 
      format: 'DD-MM-YYYY', 
      maxDate: new Date 
     }); 

// désactiver date passé

$('#datetimepicker2').datetimepicker({ 
     format: 'DD-MM-YYYY', 
     minDate: new Date 
    }); 
+0

Je ne sais pas pourquoi cette réponse a été rejetée, parce que sa solution a fonctionné pour moi, alors que la solution acceptée utilisant un '0' a provoqué une erreur JavaScript. +1 – Sheridan

5

$("#datePicker").datePicker({startDate: new Date() });. Cela fonctionne pour moi

0

je l'attribut min: min="' + (new Date()).toISOString().substring(0,10) + '"

Voici mon code et cela a fonctionné.

<input type="date" min="' + (new Date()).toISOString().substring(0,10) + '" id="' + invdateId + '" value="' + d.Invoice.Invoice_Date__c + '"/> 

enter image description here

Questions connexes