Partage
  • Partager sur Facebook
  • Partager sur Twitter

Interdire la saisie d'une date antérieur à la 1er date saisi

    25 octobre 2008 à 9:24:12

    Bonjour,

    Je me sers d'un code javascript pour afficher un calendrier qui permet de saisir une date au format Fr. J'ai un formulaire avec 2 champs date que je remplis avec ce code. J'aimerais que l'utilisateur ne puisse pas saisir dans le 2eme champ date, une date plus récente que la 1er date saisie dans le 1er champ date. Bref, que mes 2 champs date ne fonctionnent que dans un sens. Voici le code :

    moisX=["","Janvier","Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Decembre"];
    JourM=["Di","Lu","Ma","Me","Je","Ve","Sa"]; 
    
    var fermable_microcal=true; 
    var select_old= null; 
    
    var startWeek=0;//debut de la semaine 0=dim,1=lun,... 
    var jourPause={0:true,6:true}; //jour de pause de la semaine 
    var jourFeriee={"1-1":"jour an","1-5":"fête du travail","8-5":"armistice","14-7":"fête nationale","15-8":"ascencion","1-11":"armistice","11-11":"toussain","25-12":"noel"}; 
    
    //structure la date 
    function strucDate(dateX) 
    {return {"pos":dateX.getDay(),"jour":dateX.getDate(),"mois":dateX.getMonth()+1,"annee":dateX.getFullYear()};}
    
    
    var dateS= strucDate(new Date());//date Selectionné 
    var dnow= strucDate(new Date());//date actuelle 
    
    
    //retourne le ième jour du 1er du mois 
    function premJourMois(mois,annee) 
    {return (new Date(annee,mois-1,1).getDay());} 
    //retourne le jour max du mois 
    function JmaxMois(mois,annee) 
    {return (new Date(annee,mois,0).getDate());} 
    
    
    /* Test une date si elle est correct...spécial killer*/ 
    function testTypeDate(dateEntree) 
    { 
    tst=false; 
    try 
    {rc=dateEntree.split("/");nd=new Date(rc[2],(rc[1]-1),rc[0]); 
    tst=(rc[2]>1800&&rc[2]<2200&&rc[2]==nd.getFullYear()&&rc[1]==(nd.getMonth()+1)&&rc[0]==nd.getDate());
    } catch(e) {} 
    return tst; 
    } 
    
    //selection de la zone avec la souris 
    function choix(koi,code) 
    { 
    if (code) 
    {  select_old= koi.style.background; 
       koi.style.background ='#c0c0FF'; 
    } 
    else 
    { 
    koi.style.background =select_old; 
    } 
    } 
    
    
    function testTravail(oldX,xx,jj,mm,aa) 
    { 
    styleX="font-family:Tahoma;font-size:10px;text-align:center;"; 
    styleX+=(oldX)?"":"color:#e0e0e0;"; 
    styleX+="cursor:hand;border-right:1px #e0e0e0 solid;border-bottom:1px #e0e0e0 solid;"; 
    if (jourPause[xx]||jourFeriee[jj+"-"+mm]!=null) styleX+="background:#f0f0f0;"; 
    if (jj==dnow.jour&&mm==dnow.mois&&aa==dnow.annee) styleX+="border:2px red solid;"; 
    return styleX; 
    } 
    
    //test si année bissextile 
    function bissextile(annee) { 
    return (annee%4==0 && annee %100!=0 || annee%400==0); 
    } 
    
    //Retourne le nombre de jour depuis le 1er janvier (num de semaine) 
    function nbJAnnee(dateX){ 
    var nb_mois=[,0,31,59,90,120,151,181,212,243,273,304,334]; 
    j=dateX.jour ; m=dateX.mois ; a=dateX.annee; 
    nb=nb_mois[m]+j-1 ; 
    if (bissextile(a) && m>2) nb++; 
    return nb; 
    } 
    
    //affiche le calendrier 
    function view_microcal(actif,ki,source,mxS,axS) 
    { 
    if (actif) 
    { 
    //decalage du mois su on clique sur -/+ 
    if (mxS!=-1) 
    { 
    clearTimeout(cc); 
    ki.focus(); 
    fermable_microcal=true; 
    dateS.mois=mxS; 
    dateS.annee=axS; 
    if (dateS.mois<1) {dateS.annee--;dateS.mois+=12;} 
    if (dateS.mois>12) {dateS.annee++;dateS.mois-=12;} 
    } 
    //init 
    Dstart=(premJourMois(dateS.mois,dateS.annee)+7-startWeek)%7; 
    jmaxi=JmaxMois(dateS.mois,dateS.annee); 
    jmaxiAvant=JmaxMois((dateS.mois-1),dateS.annee); 
    //si on veux ajouter le numero de la semaine ... 
    //idxWeek=parseInt(nbJAnnee(strucDate(new Date(dateS.mois+'-01-'+dateS.annee)))/7,10)+1; 
    
    ymaxi=parseInt((jmaxi+Dstart+1)/7,10); 
    
    //generation du tableau 
    //--entête 
    htm="<table><tr style='font-size:10px;font-family:Tahoma;text-align:center;'>"; 
    htm+="<td style='cursor:hand;' onclick=\"view_microcal(true,"+ki.id+","+source.id+","+(dateS.mois-1)+","+dateS.annee+");\">-</td>"; 
    htm+="<td colspan='5'> <b> "+moisX[dateS.mois]+"</b>&nbsp;"+dateS.annee+"</td>"; 
    htm+="<td  style='cursor:hand;' onclick=\"view_microcal(true,"+ki.id+","+source.id+","+(dateS.mois+1)+","+dateS.annee+")\">+</td></tr>";
    //--corps 
    htm+="<tr>"; 
    //affichage des jours DLMMJVS 
    for (x=0;x<7;x++) 
    htm+="<td  style='font-size:10px;font-family:Tahoma;'><b>"+JourM[(x+startWeek)%7]+"</b></td>"; 
    htm+="</tr>" 
    
    
    //------------------------ 
    for (y=0;y<=ymaxi;y++) 
    { 
    htm+="<tr>"; 
    for (x=0;x<7;x++) 
    { 
    idxP=y*7+x-Dstart+1;   //numero du jour 
    aa=dateS.annee; 
    xx=(x+startWeek)%7; 
    //jour du mois précedent 
    if (idxP<=0) 
    { 
    jj=idxP+jmaxiAvant;mm=dateS.mois-1; 
    if (mm==0) 
    {mm=12;aa--;} 
    htm+="<td style='"+testTravail(false,xx,jj,mm,aa)+"' onmouseover='choix(this,true)' onmouseout='choix(this,false)'  onclick=\""+(ki.id)+".value='"+((jj<10)?"0":"")+jj+"/"+((mm<10)?"0":"")+mm+"/"+aa+"';"+(ki.id)+".style.color='black';\">"+jj+"</td>"; 
    } 
    else if (idxP>jmaxi) //jour du mois suivant 
    { 
    jj=idxP-jmaxi;mm=dateS.mois+1; 
    if (mm==13) 
    {mm=1;aa++;} 
    
    htm+="<td style='"+testTravail(false,xx,jj,mm,aa)+"' onmouseover='choix(this,true)' onmouseout='choix(this,false)'  onclick=\""+(ki.id)+".value='"+((jj<10)?"0":"")+jj+"/"+((mm<10)?"0":"")+mm+"/"+aa+"';"+(ki.id)+".style.color='black';\">"+jj+"</td>";} 
    else //jour du mois en cours 
    { 
    jj=idxP;mm=dateS.mois; 
    htm+="<td style='"+testTravail(true,xx,jj,mm,aa)+"' onmouseover='choix(this,true)' onmouseout='choix(this,false)'  onclick=\""+(ki.id)+".value='"+((jj<10)?"0":"")+jj+"/"+((mm<10)?"0":"")+mm+"/"+aa+"';"+(ki.id)+".style.color='black';\">"+jj+"</td>";} 
    } 
    htm+="</tr>" 
    }//------------------------- 
    htm+="</table>" 
    //affiche le tableau 
    source.innerHTML=htm; 
    source.style.visibility=""; 
    } else 
    { 
    //ferme le calendrier 
    if (fermable_microcal) 
       cc=setTimeout(source.id+".style.visibility='hidden'",500); 
    }
    


    • Partager sur Facebook
    • Partager sur Twitter

    Interdire la saisie d'une date antérieur à la 1er date saisi

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown