Page 1 sur 1

Valide une date et/ou une heure et retourne un objet date JS

MessagePublié: 31 Mars 2006 à 10:18
par thierry.ceretto
Pour un besoin spécifique, j'ai fait cette fonction JS, si cela peut servir à d'autres, libre à vous de l'adapter au besoin.

Thierry

*************************************************************
Cette fonction retourne un objet date javascript ou false si erreur.

Description :

- UneDate : type texte, format JJ/MM/AAAA
- UneHeure : type texte, format HH:MM
- Au moins un paramétre est obligatoire.
- Si paramètre UneDate uniquement : retourne la date spécifiée et l'heure à 00:00:00
- Si paramètre UneHeure uniquement : retourne la date du jour à l'heure spécifiée (secondes à 00)
- Si deux paramètres : retourne date et heure spécifiées (secondes à 00)
*************************************************************

Code : Tout sélectionner
function CreatDateHeure(UneDate,UneHeure) {
/* Quelques éléments de cette fonction sont repris d'une fonction trouvée je ne sais plus où...*/
/* ... donc merci à son auteur.*/

/****************************************************************************************************
Cette fonction retourne un objet date javascript ou false si erreur.

Description :

- UneDate : type texte, format JJ/MM/AAAA
- UneHeure : type texte, format HH:MM
- Au moins un paramétre est obligatoire.
- Si paramètre UneDate uniquement : retourne la date spécifiée et l'heure à 00:00:00
- Si paramètre UneHeure uniquement : retourne la date du jour à l'heure spécifiée (secondes à 00)
- Si deux paramètres : retourne date et heure spécifiées (secondes à 00)
*****************************************************************************************************/

/* Nom de la fonction */
this.name = 'CreatDateHeure(date,heure)'

/* Contrôle qu'au moins un paramètre a été passé dans la fonction*/
if (UneDate+UneHeure == '') {
msgErr = 'Erreur fonction \"'+this.name+'\" : au moins un paramètre (date ou heure) est obligatoire !'
msgErr += '\rFormat de la date = JJ/MM/AAAA'
msgErr += '\rFormat de l\'heure = HH:MM'
alert(msgErr)
return false;
} else {   
   /* Traitement de la date */
   if(UneDate !='') {
      /* Contrôle si la date est cohérente par rapport au calendrier (grégorien), */
      /* années bisextiles incluses */       
      var dt=UneDate     
      var msgErrFormat  = 'Veuillez saisir la date au format JJ/MM/AAAA';      
      /* Contrôle la longueur de la chaîne = 10 caractères */
      if (dt.length != 10) {
      alert(msgErrFormat)
      return false;
      }      
      /* Contrôle le format de la chaine = JJ/MM/AAAA (caractères numérique et /) */
      var re = /\d{2}\/{1}\d{2}\/{1}\d{4}/
      if ( !re.test(dt) ) {
      alert(msgErrFormat)
      return false;
      }      
      /* Jour :  extrait et converti en valeur numérique */       
      var jj = parseInt(dt.substring(0, 2),10);      
      /* Mois : extrait et converti en valeur numérique */
      var mo = parseInt(dt.substring(3, 5),10);
      /* Année :  extrait et converti en valeur numérique */         
      var aaaa = parseInt(dt.substring(6, 10),10);      
      var err=0
      /* Contrôle l'année :  de 1800 à 9999 */
      if (aaaa<0000 || aaaa>9999 || isNaN(aaaa) )  err = 1    
      /* Contrôle le mois : de 1 à 12 */
      if (mo<1 || mo>12 || isNaN(mo) ) {err = 2} ;       
      /* Contrôle le jour : mois de février (année bissextile ou non)*/
      if (mo==2) {
         /* Une année est bissextile si elle est divisible par 4, sauf si elle est divisible par 100 tout en ne l'étant pas par 400. */
         /* anneeBissextile retourne true ou false */
         var anneeBissextile = (aaaa%4==0 && aaaa%100!=0 || aaaa%400==0);                  
         if (anneeBissextile) {
            if (jj>29) {err=3}
            } else {
            if (jj>28) {err=4}
         }
      }
      /* Contrôle le jour : mois de 30 jours*/
      if (mo==4 || mo==6 || mo==9 || mo==11) {
         if (jj==31) {err=5};
      }
      /* Contrôle le jour : mois de 31 jours */
      if (jj<1 || jj>31|| isNaN(jj) ) {err = 6};         
      
      /* Messages d'erreurs */
      if (err==1) {
      alert('L\'année '+aaaa+' est erronée !')
      return false;
      }
      if (err==2) {
      alert('Le mois est erroné !')
      return false;
      }    
      if (err==3 || err==4 ) {
         var d = new Date();
         var anneeCourante = d.getFullYear();
         var verbe = '';
         if (aaaa == anneeCourante) {verbe = 'a'}
         if (aaaa > anneeCourante) {verbe = 'aura'   }
         if (aaaa < anneeCourante) {verbe = 'avait'}
         if (err==3) {      
         alert('En '+aaaa+', le mois de février (02) n\''+verbe+' que 29 jours !')
         return false;
         }
         if (err==4) {
         alert('En '+aaaa+', le mois de février (02) n\''+verbe+' que 28 jours !')
         return false;
         }
      }
      if (err==5 || err==6) {
      /* Tableau des mois */
      var moisTxt = new Array('de janvier','de février','de mars','d\'avril','de mai','de juin','de juillet','d\'août','de septembre','d\"octobre','de novembre','de décembre' )
         if (err==5) {
         alert('Le mois '+moisTxt[mo-1]+' ('+dt.substring(3, 5)+') n\'a que 30 jours !')
         return false;
         }
         if (err==6) {   
         alert('Le mois '+moisTxt[mo-1]+' ('+dt.substring(3, 5)+') n\'a que 31 jours !')
         return false;
         }
      }      
   /* Retourne un objet javascript date et heure : format  AAAA MM JJ HH:MM:00 */      
   DateHeure =  new Date(aaaa,mo-1,jj);
   };
   
   /* Traitement de l'heure */
   if (UneHeure !='') {          
      hr=UneHeure   
      msgErrFormat  = 'Veuillez saisir l\'heure au format HH:MM';      
      /* Contrôle la longueur de la chaîne = 10 caractères */
      if (hr.length != 5) {
      alert(msgErrFormat)
      return false;
      }      
      /* valide une heure passée au format HH:MM */   
      re =/\d{2}\:{1}+\d{2}/
      if( !re.test(hr) ) {
      alert(msgErrFormat)
      return false;
      };
      /* Contrôle si l'heure est cohérente */
      var err=0      
      /* Extrait l'heure, la convertie en valeur numérique */
      hh = parseInt(hr.substring(0, 2),10)
      /* Extrait les minutes, les converties en valeur numérique */
      mm = parseInt(hr.substring(3, 5),10)
       /* Contrôle l'heure : inférieure ou égale à 23 */
      if (hh >23 || isNaN(hh) ) {err = 10};    
      /* Contrôle les minutes : inférieure ou égale à 59 */
      if (mm >59 || isNaN(mm) ) {err = 11};      
      /* Messages d'erreurs */
      if (err==10) {
      alert('L\'heure est erronée (00 à 23) !')
      return false;
      };
      if (err==11) {
      alert('Les minutes sont erronées (00 à 59) !')
      return false;
      };
      /* Retourne un objet javascript date et heure : format  AAAA MM JJ HH:MM:SS */
      /* Si pas de date spécifiée = date du jour et heure spécifiée */
      if(UneDate =='') {
      today = new Date()
      today.setHours(hh)
      today.setMinutes(mm)
      today.setSeconds(00)
      DateHeure =  today;
      } else {
      /* Si date spécifiée = date et  heure spécifiées */
      DateHeure = new Date(aaaa,mo-1,jj,hh,mm);
      }         
   };   
return DateHeure;
};
}