IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Mise à jour automatique d'un champs date


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 90
    Points : 53
    Points
    53
    Par défaut Mise à jour automatique d'un champs date
    Bonjour,

    Je souhaite formater automatiquement un champs de formulaire en sortie de zone mais j'y arrive pas...
    Le champs de saisi doit normalement contenir une date.
    Les formats acceptés pour le formatage automatique sont les suivants :
    JJMMYY
    JJ/MM/YY
    JJMMYYYY
    JJ/MM/YYYY

    Si la valeur saisie est dans un de ces quatre formats, je cherche à mettre à jour la zone avec la valeur JJ/MM/YYYY. Sinon, je laisse la saisie comme tel.

    Quelqu'un pourrait-il m'aider ?

    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    tu as un debut de code ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 90
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    tu as un debut de code ?
    Oui... Le voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    function FormatDate(zone, d) {
    var separateur='/';	
    var ok=0;
    if (d.length == 6)
    {
    	var j=(d.substring(0,2));
    	var m=(d.substring(2,4));
    	var a=(d.substring(4));
    	ok=1;
    }
    else if (d.length == 8)
    {
    	if (d.substring(2,3) == separateur)
    	{
    		var j=(d.substring(0,2));
    		var m=(d.substring(3,5));
    		var a=(d.substring(6));
    		ok=1;	
    	}
    	else
    	{
    		var j=(d.substring(0,2));
    		var m=(d.substring(2,4));
    		var a=(d.substring(5));
    		ok=1;		
    	}
    }
    else if (d.length == 10)
    {
    	var j=(d.substring(0,2));
    	var m=(d.substring(3,5));
    	var a=(d.substring(6));
    	ok=1;	
    }
     
     
    if ( ((isNaN(j))||(j<1)||(j>31)) && (ok==1)) {ok=0;} 
    if ( ((isNaN(m))||(m<1)||(m>12)) && (ok==1)) {ok=0;}
    if ( isNaN(a) && (ok==1) ) {ok=0;} else {if (a < 100) {if (a < 10) a = (a + 2000); else a = (a + 1900);}}
    	zone.value = a;
    if (ok==1) {
      var d2=new Date(a,m-1,j);
      j2=d2.getDate();
      m2=d2.getMonth()+1;
      a2=d2.getFullYear();  
     
      if ( (j!=j2)||(m!=m2)||(a!=a2) ){ok=0;}  
      else
      	{zone.value = j2 + separateur + m2 + separateur + a2;
      		}
     }
     
    return ok;
    }
    Marche pas pour l'instant mais il doit pas manquer grand chose : je cherche plus a le faire fonctionner...
    Je préfèrerais gérer le problème avec les expressions régulière mais j'y comprends rien
    A moins que tu ne pense que ma 1ère direction est la bonne ?

    En tout cas merci de m'avoir répondu.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    oulà ...
    mieux vaux passer par une bonne veille expession régulière ...
    tu ferait d'une pierre deux coup : le teste de foramt et la decomposition avec la même regExp
    je jette un oeil dessus demain

    la regExp donnerait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(\d{2})/?(\d{2})/?(\d{2}\d{2}?)$
    après pour tester par rapport a ce pattern et manipuler l'expression je vois ça demain
    [edit] heu pas de backrefs ici ^^


    il faudra ensuite verifier en plus si il s'agit bien d'une date
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 90
    Points : 53
    Points
    53
    Par défaut
    Bonjour,

    Merci de ta réponse.
    Peux-tu me dire comment exploiter cette expression régulière ?
    Comment récupérer le jour, le mois et l'année ?

    Merci encore.

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <script type="text/javascript">
     
    regDate=new RegExp(/^(\d{2})\/?(\d{2})\/?(\d{2}\d{2}?)$/) ;
    function verif(){
    Chaine=document.getElementById('indate').value;
    alert(Chaine)
    if(!regDate.test(Chaine)){alert('format de date non reconnu !');
                              return false;
                              }
    else{ Chaine.match(regDate);
          formatDate=RegExp.$1+"/"+RegExp.$2+"/"+RegExp.$3;
          document.getElementById('outdate').innerHTML=formatDate;
          }
    }
    </script>
     
    </head>
     
    <body>
    <input type='text' id='indate' />
    <input type="button" onclick="verif()" value="check date" /><br />
    <span id="outdate"></span>
    </body>
    Attention cela ne vérifie que le format ! pas l'exactitude de la date !!
    on peut saisir 99/99/9999 !
    il faut coupler cela avec une autre vérifiaction verification dans le else
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 90
    Points : 53
    Points
    53
    Par défaut
    MERCI !

    Ton expression régulière est ok si on tape :
    "01011990" ou "01/01/1990"
    mais
    "010190" et "01/01/90" ne correspondent pas à ton expression régulière.
    Une idée ?

  8. #8
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Salut,

    chtom, l'intégrité de la date importe-elle? Car avec les expressions rationnelles on pourra taper une date ressemblant à 50/50/1990 ou pire 31/02/2009.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    oui deslé j'ai modifié par rapport à la première et il en fallait pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regDate=new RegExp(/^(\d{2})\/?(\d{2})\/?(\d{2}\d{2}?)$/) ;
    mais se pose alors une question ???

    comment extrapoles tu les deux premier chiffres de l'année ???
    là ça te retourne 25 pour 25 ...
    qui te dis que c'est 1925 ou 2025 ???

    quel doivent être les deux premiers chiffres par defaut ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 90
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par franculo_caoulene
    chtom, l'intégrité de la date importe-elle? Car avec les expressions rationnelles on pourra taper une date ressemblant à 50/50/1990 ou pire 31/02/2009.
    L'intégrité de la date est vérifiée au moment d'enregistrer dans la base. C'est juste une aide à la saisie qui est gérée là.

    Citation Envoyé par SpaceFrog
    mais se pose alors une question ???

    comment extrapoles tu les deux premier chiffres de l'année ???
    là ça te retourne 25 pour 25 ...
    qui te dis que c'est 1925 ou 2025 ???

    quel doivent être les deux premiers chiffres par defaut ?
    Je pars sur la base suivante :
    si l'année est <= a l'année courant alors on cherche à saisir une année 19xx
    sinon je suppose que l'année est 20xx

    Soit :
    010102 => 01/01/2002
    251210 => 25/12/1910
    310870 => 31/08/1970
    311290 => 31/12/1990

    C'est une règle que je fixe mais rien n'empêche l'utilisateur de saisir l'année sur 4 chiffres si ca ne lui convient pas....

    Citation Envoyé par SpaceFrog
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regDate=new RegExp(/^(\d{2})\/?(\d{2})\/?(\d{2}\d{2}?)$/) ;
    Je ne vois aucune différence par rapport à la précédente.

  11. #11
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    regDate=new RegExp(/^(\d{2})\/?(\d{2})\/?(\d{2}(\d{2})?)$/) ;
    function verif(){
    Chaine=document.getElementById('indate').value;
    if(!regDate.test(Chaine)){alert('format de date non reconnu !');
                              return false;
                              }
    else{ Chaine.match(regDate);
          formatDate=RegExp.$1+"/"+RegExp.$2+"/"
    		Year=RegExp.$3;
    		today=new Date();
    		refYear=today.getFullYear().toString().substr(2,2);
     
      	  switch(true){
      	  	case (Year.length==2 && parseInt(Year)> refYear) :	    formatDate+="19"+Year;
      	  																	 break;
    		case(Year.length==2 && parseInt(Year)<= refYear)  : 	    formatDate+="20"+Year;
    																		 break;
    		default 												:		 formatDate+=Year;		
     
    	   }
     
     
     
          document.getElementById('outdate').innerHTML=formatDate;
          }
    }
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 90
    Points : 53
    Points
    53
    Par défaut
    Merci ca fonctionne nickel comme je le souhaitais

    Pour info, voici ma procédure de vérif de date correcte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    function VerifDate(d) {
    var separateur='/';
    var j=(d.substring(0,2));
    var m=(d.substring(3,5));
    var a=(d.substring(6));
    var ok=1;
    if ( ((isNaN(j))||(j<1)||(j>31)) && (ok==1) ) {
     alert('Le jour n\'est pas correct. \n Le format de date est JJ/MM/AAAA'); ok=0;
     }
    if ( ( (isNaN(m))||(m<1)||(m>12)) && (ok==1) ) {
     alert('Le mois n\'est pas correct.'); ok=0;
     }
    if ( isNaN(a) && (ok==1) ) {
     alert('L\'année n\'est pas correcte.'); ok=0;
     }
    if ( ((d.substring(2,3)!=separateur)||(d.substring(5,6)!=separateur)) && (ok==1) ) {
     alert('Les séparateurs des dates doivent être des '+separateur); ok=0;
     }
    if (ok==1) {
      var d2=new Date(a,m-1,j);
      j2=d2.getDate();
      m2=d2.getMonth()+1;
      a2=d2.getFullYear();
      //if (a2<=100) {a2=1900+a2}
      if ( (j!=j2)||(m!=m2)||(a!=a2) ) {
        alert('La date '+d+' n\'existe pas !');
      ok=0;
      }
     }
    return ok;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mise à jour automatique d'un champ date
    Par Latimer dans le forum jQuery
    Réponses: 12
    Dernier message: 26/05/2015, 13h28
  2. Mise à jour automatique d'un champ
    Par Destiny dans le forum Access
    Réponses: 1
    Dernier message: 20/08/2014, 09h45
  3. [AC-2000] Mise à jour automatique d'un champ dans une table
    Par Nerva dans le forum Access
    Réponses: 3
    Dernier message: 14/10/2010, 18h49
  4. Mise à jour automatique d'un champ
    Par supertoms dans le forum VBA Access
    Réponses: 1
    Dernier message: 16/05/2008, 18h26
  5. [Word 2000] Mise à jour automatique d'un champ
    Par texas2607 dans le forum Word
    Réponses: 12
    Dernier message: 13/09/2007, 12h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo