2009-11-19 5 views
4

J'ai un champ de texte HTML. Je veux valider par JavaScript que la valeur entrée est une date valide sous la forme "MM/JJ/AA" ou "MM/J/AA" ou "MM/JJ/AAAA" ou "MM/J/AAAA". Y a-t-il une fonction qui fait cela?JavaScript - Valider la date

Je pensais qu'il y avait quelque chose comme isNaN mais je ne vois rien. Est-il vrai que JavaScript ne peut pas valider les dates?

+2

Javascript ne peut valider les dates. Mais vous pouvez valider les dates avec Javascript. – rogeriopvl

Répondre

9

Est-il vrai que JavaScript ne peut pas valider les dates?

No.

Y at-il une fonction qui fait cela?

No.

Vous devrez écrire votre propre fonction de validation pour analyser le format de date (regex vient à l'esprit), puis déterminer si elle est valide dans vos critères spécifiques.

+2

J'aime comment cela a été downvoted même si j'ai explicitement répondu aux deux questions et fourni des informations supplémentaires: P –

+8

cette réponse est très précise et tout à fait inutile sans l'exemple – piotrga

+2

D'accord, seulement une demi-réponse – drogon

0

Avez-vous recherché sur google pour quelque chose comme javascript date validation? Il montre quelques bonnes informations, et un exemple de code de travail here.

+9

Désolé d'être PITA, mais si tout le monde a été dit de google, il n'y aurait pas besoin de ce site. Ce site est pour les gens à offrir des conseils et du code, pas juste pour le dire! –

+1

Ai-je * juste * dit google? Tu ne vois pas que je lui ai donné (un lien vers) un exemple de code? –

+5

Aussi, Gary, n'êtes-vous pas d'accord avec le fait que certains * do * doivent être dit de google un peu? –

1

Si vous voulez vous aventurer dans les domaines de JQuery, il existe de nombreux plugins de validation qui incluent la validation de la date. This plugin est celui que j'ai utilisé plusieurs fois et m'a bien servi.

2

Découvrez http://momentjs.com/. Son utilisation, cet extrait

instant (yourCandidateString, 'MM-JJ-AAAA). IsValid()

devrait faire le travail.

0

Je vous suggère quelques solutions.

  1. guide l'entrée utilisateur avec un sélecteur de date. De cette façon, vous pouvez contrôler le format d'entrée. jQueryui datepicker est une implémentation populaire.

  2. Utilisez une bibliothèque js pour gérer le type de données datetime (pas un type de données réel dans Javascript !!). Je vous suggère date.js.

1
<input type="text" id="dateinput"/> 

<script type="text/javascript"> 
    $(#"dateinput").datepicker({ 
     buttonImage: "images/calendar.png", 
     dateFormat: "yyyy-MMM-dd" 
    }); 

    function validateDate() { 
     if ($(#"dateinput").val().trim() == "") { 
      // Is a blank date allowed? 
      return true; 
     } 
     var oldVal = $(#"dateinput").val(); // Current value in textbox 
     // Now use jQueryUI datepicker to try and set the date with the current textbox value 
     $(#"dateinput").datepicker("setDate",$(#"dateinput").val()); 
     // Check if the textbox value has changed 
     if (oldVal != $(#"dateinput").val()) { 
      // The datepicker will set something different if the date is invalid 
      $(#"dateinput").val(oldVal); // Set the textbox back to the invalid date 
      alert ("date was invalid"); 
      return false; 
     } else { 
      // If nothing changed, the date must be good. 
      return true; 
     } 
    } 
</script> 
6

Vous pouvez utiliser propre objet Date de javascript pour vérifier la date. Puisque l'objet date permet de déblayer avec les valeurs du mois et du jour (par exemple, le 32 mars serait corrigé au 1er avril), vous pouvez simplement vérifier que la date que vous créez correspond à celle que vous avez créée. , mais c'est plus long pour la clarté.

function checkDate(m,d,y) 
{ 
    try { 

     // create the date object with the values sent in (month is zero based) 
     var dt = new Date(y,m-1,d,0,0,0,0); 

     // get the month, day, and year from the object we just created 
     var mon = dt.getMonth() + 1; 
     var day = dt.getDate(); 
     var yr = dt.getYear() + 1900; 

     // if they match then the date is valid 
     if (mon == m && yr == y && day == d) 
     return true; 
     else 
     return false; 
    } 
    catch(e) { 
     return false; 
    } 
} 
1

Il ne semble pas y avoir de fonction intégrée qui fait cela.Cependant, ce code est probablement ce que vous cherchez:

<script type="text/javascript"> 

/**-------------------------- 
//* Validate Date Field script- By JavaScriptKit.com 
//* For this script and 100s more, visit http://www.javascriptkit.com 
//* This notice must stay intact for usage 
---------------------------**/ 

function checkdate(input){ 
    var validformat=/^\d{2}\/\d{2}\/\d{4}$/ //Basic check for format validity 
    var returnval=false 
    if (!validformat.test(input.value)) 
     alert("Invalid Date Format. Please correct and submit again.") 
    else{ //Detailed check for valid date ranges 
     var monthfield=input.value.split("/")[0] 
     var dayfield=input.value.split("/")[1] 
     var yearfield=input.value.split("/")[2] 
     var dayobj = new Date(yearfield, monthfield-1, dayfield) 
     if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield)) 
      alert("Invalid Day, Month, or Year range detected. Please correct and submit again.") 
     else 
      returnval=true 
    } 
    if (returnval==false) input.select() 
    return returnval 
} 

</script> 

Source: http://www.javascriptkit.com/script/script2/validatedate.shtml

0

Voici ce que j'utilise pour valider une date.

Date.parse renvoie NaN pour les dates non valides.

Ceci prend en charge les formats date-seulement et date + heure.

Espérons que cela aide.

var msg; 
var str = "2013-12-04 23:10:59"; 
str = "2012/12/42"; 
var resp = Date.parse(str); 
if(!isNaN(resp)) { msg='valid date'; } else { msg='invalid date'; } 
console.log(msg); 
+0

Ce n'est pas une bonne approche. Comme mentionné dans la réponse de user1883048, certains moteurs javascript analyseront les dates non valides. 2/31/2014 devient 3/3/2014. 55/55/5555 devient un moment dans l'année 2024 dans Firefox. – Quickhorn