2012-11-08 3 views
1

J'essaie d'utiliser JavaScript pour valider que la date sélectionnée n'est pas antérieure à aujourd'hui, mais lorsque je sélectionne la date du jour, elle affiche la boîte d'alerte.Javascript check date

JavaScript:

function checkDueDate(sender, args) { 
    var td = new Date(); 
    td.setMinutes(59); 
    td.setSeconds(59); 
    td.setHours(23); 
    //to move back one day 
    td.setDate(td.getDate() - 1); 

    if (sender._selectedDate < td) { 
     alert("You can't select day from the past! " + td + ""); 
     sender._selectedDate = new Date(); 
     // set the date back to the current date 
     sender._textbox.set_Value(sender._selectedDate.format(sender._format)) 
    } 

ASP.NET:

 <asp:TextBox ID="txtDueDate" runat="server"></asp:TextBox> 
     <asp:CalendarExtender ID="txtDueDate_CalendarExtender" runat="server" 
      TargetControlID="txtDueDate" OnClientDateSelectionChanged="checkDueDate"> 
     </asp:CalendarExtender> 

Image

+0

Dites-nous le problème, vous Semble obtenez ce que vous voulez – polin

+0

Alors, quel est votre problème ?? –

+0

J'utilise Ajax extender pour le sélecteur de date – laspalmos

Répondre

2

Je pense que peut-être vous êtes compliquer les choses trop. Je voudrais juste soustraire un jour à miliseconds et il devrait fonctionner:

function isPast(date) { 
    return date.getTime() < (new Date().getTime() - 864e5); 
} 

Démo:http://jsbin.com/igeyov/1/edit

+0

j'emploie le sélecteur de date d'ajax pour choisir la date d'échéance – laspalmos

+0

ainsi ... vous pouvez juste passer la date du datepicker à 'isPast' en tant qu'objet' Date'. – elclanrs

+0

qu'est-ce que cela signifie 864e5? – Talha

0

la logique que vous avez ici semble faire exactement ce que vous voulez - vous avez défini la variable td que vous évaluer par rapport à la dernière seconde possible de la date d'aujourd'hui et vous vérifiez si la date sélectionnée est antérieure ou égale à celle-ci. Aujourd'hui, la date est "avant ou égal à" 23:59:59 aujourd'hui ...

De plus, vous avez tagué ceci avec C#, bien que ce soit javascript et ASP.net pour autant que je sache.

+0

Je mets à jour la question avec le code d'asp.net – laspalmos

0

si vous voulez faire sélectionner des dates que l'avenir vous pouvez essayer ce code aussi .... que cela fonctionne avec le calendrier ajax:

function checkDate(sender, args) { 
     if (sender._selectedDate < new Date()) { 
      alert("You can select only future day!"); 
      sender._selectedDate = new Date(); 
      // set the date back to the current date 
      sender._textbox.set_Value(sender._selectedDate.format(sender._format)) 
     } 
    } 

Voici le code HTML:

<asp:TextBox ID="txtDOB" Width="180px" MaxLength="50" runat="server"></asp:TextBox> 
          <ajaxctrl:calendarextender onclientdateselectionchanged="checkDate" id="cale_txtDOB" 
           runat="server" targetcontrolid="txtDOB" format="MM/dd/yyyy" cssclass="cal_Theme1"> 
          </ajaxctrl:calendarextender> 

Ce code ne fonctionne que si vous sélectionnez des dates passées, il affichera une fenêtre pop-up "que vous ne pouvez pas sélectionner les dates passées" que ce soit. CODE MISE À JOUR: est ici le travail de code si vous ne voulez pas inclure la date d'aujourd'hui aussi, vous voulez juste des dates futures seulement:

function checkDate(sender, args) { 
     if (sender._selectedDate <= new Date()) { 
      alert("You can select only future day!"); 
      sender._selectedDate = new Date(); 
      // set the date back to the current date 
      //sender._textbox.set_Value(sender._selectedDate.format(sender._format)) 
     } 
    } 

espère que cela vous aidera ..