Partage
  • Partager sur Facebook
  • Partager sur Twitter

Calcul âge d'après date de naissance

Function pour calculer automatiquement un âge d'après une date

    16 juin 2016 à 14:09:21

    Bonjour,

    Je suis en train de chercher une fonction javacript qui me permettrais de calculer un âge automatiquement et de l'inscrire dans un input ceci grâce à une date d'anniversaire remplis dans un autre input.

    J'ai trouvé un sujet très intéressant la dessus et qui fait ce que je vous explique mais il y a un problème dans le script. Il ne calcule pas exactement l'âge. Il y a quelques raté avec les mois ou jours...

    Voici mon code actuel :

    <!DOCTYPE html>
    <html>
    
    <body>
    <script>
    function CalculAge() {
        var td=new Date();// Le date d'ouverture de la page (aujourd'hui)
        var dtn=document.getElementById('DateNais').value; // on lit la date de naissance
        var an=dtn.substr(6,4); // l'année (les quatre premiers caractères de la chaîne à partir de 6)
        var mois=dtn.substr(3,2);// On selectionne le mois de la date de naissance
        var day= dtn.substr(0,2); // On selectionne la jour de la date de naissance
        var age=td.getFullYear()-an; // l'âge du patient
     
        var mMois=td.getMonth()-mois+1; // On calcul  le mois de la date - le mois de la date de naissance
     
         
        if(mMois < 0) // s'il est strictement inferieur a 0
        {
            age=age-1; // On enléve 1 ans a l'age
        }  
        else
        {
            if(mMois == 0)// s'il égal 0 on est sur le même mois
            {
                var mDate=td.getDay()-day;
                if(mDate < 0)
                {
                    age=age-1;
                }
                 
            }
        }
     
        document.getElementById('Age').value=age; // que l'on place dans le input d'id Age
    }
    </script>
    <label>Date de Naissance : </label><input type="text" id="DateNais" name="dateNais" Onblur="CalculAge()">
    <label>Age : </label><input type="text" name="age" id="Age">
    </body>
    
    </html>

    J'ai fait les motifs expliqué dans le sujet mais ça ne fonctionne pas super...

    Apparement il faut ajouter un +1 à la ligne 14 :

    var mMois=td.getMonth()-mois+1;

    ou alors un +1 à la ligne 10 :

    var mois=dtn.substr(3,2)-1;


    J'ai essayé les deux mais ça n'est toujours pas parfait...

    Quelqu'un peu m'aider ?

    Merci !!!



    -
    Edité par KevinDuc 16 juin 2016 à 14:09:49

    • Partager sur Facebook
    • Partager sur Twitter

    Dev

      16 juin 2016 à 15:59:47

      Bonjour,

      Je t'ai proposé une solution qui fonctionne à cette adresse : http://codepen.io/Deejayfool/pen/jrrzjV

      J'ai conservé le fonctionnement que tu souhaitais pour le format de la date, c'est à dire : jj-mm-aaaa.

      • Partager sur Facebook
      • Partager sur Twitter
        16 juin 2016 à 16:11:14

        https://jsfiddle.net/4sztbmaz/15/

        Bien à toi

        -
        Edité par unchained77 16 juin 2016 à 16:32:50

        • Partager sur Facebook
        • Partager sur Twitter
          16 juin 2016 à 17:00:15

          Super merci !

          J'ai pris la deuxième solution, elle fonctionne nikel

          Pas testé la première mais merci quand même

          • Partager sur Facebook
          • Partager sur Twitter

          Dev

            20 juin 2016 à 14:50:19

            Malheureusement non, la 2ème solution ne fonctionne qu'à moitié.

            Si tu essaies aujourd'hui en mettant par exemple 19-06-2015 ou 20-06-2015 ou 21-06-2015 (nous sommes le 20-06-2016), et bien le 2ème code te retournera toujours "1 an".

            Seul le premier code te retournera "0 an" pour la date du 21-06-2015.

            • Partager sur Facebook
            • Partager sur Twitter
              20 juin 2016 à 17:09:26

              Utiliser Javascript pour faire une simple soustraction, c’est un peu donner de la confiture aux cochons !

              Alors profitons-en donnons les années, les mois et les jours !

              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
              <html>
              <head>
              <meta http-equiv="content-type" content="text/html; charset=utf-8">
              <meta name="generator" content="PSPad editor, www.pspad.com">
              <title>Age in years, months and days</title>
              <style type="text/css">
              #pge{display:block;width:400px;margin:0 auto;background-color:#ffd;padding:5px;}
              
              </style>
              </head>
              <body>
              <div id="pge">
              	<fieldset><legend>Age en années mois et jours</legend>
              	<p><label>Date de naissance : <input id="dte" type="text" onblur="calc(this.value)"><label> ok !</p>
              	<p id="rsp"></p>
                 </fieldset>
              </div>
              
              <script type="text/javascript">
              function calc(v){var month, date, year;
              	// la méthode replace avec une fonction pour définir le jour, le mois et l'année
              	v.replace(/0?([\d]{1,2})[\D]*0?([\d]{1,2})[\D]*([\d]{4,4})/g,
              	function(mtf,qn,ms,an){
              		var jm=+ms-1,brd=new Date(an,jm,qn,12,0,0);
                    var rsp=document.getElementById('rsp');
              		if (brd.getMonth()!=jm) {rsp.innerHTML="La date "+v+" semble erronée\nEntrez les dates sous la forme jj/mm/aaaa";return}
              
              		var tdy=new Date();tdy.setHours(12,0,0); // at noon !
              
              		var str='Aujourd’hui : '+tdy.toLocaleString()+'<br>Naissance le : '+brd.toLocaleString()+'<br>';
              		var dltDays=0;
              		while (tdy.getDate()!=brd.getDate()) {dltDays++;tdy.setDate(tdy.getDate()-1);}
              		// Nous travaillons la 1er jour du mois
              		tdy.setDate(1);brd.setDate(1);
              		var dltMonths=0;while (tdy.getMonth()!=brd.getMonth()) {dltMonths++;tdy.setMonth(tdy.getMonth()-1);}
              		var dltYears=0;while (tdy.getFullYear()!=brd.getFullYear()) {dltYears++;tdy.setFullYear(tdy.getFullYear()-1);}
              
              		str+='Vous avez '+dltYears+' an'+(dltYears<2?' ':'s ')+' '+dltMonths+' mois '+(dltDays?'et jour'+(dltDays<2?'':'s')+' '+dltDays:'.');
              		document.getElementById('rsp').innerHTML=str;
              	});
              }
              </script>
              </body>
              </html>

              -
              Edité par 007julien 20 juin 2016 à 17:49:21

              • Partager sur Facebook
              • Partager sur Twitter
                20 juin 2016 à 17:16:13

                bon j'ai corrigé, https://jsfiddle.net/4sztbmaz/26/

                bien evidemment sit l'age < 0 -> age = 0; il manque une condition

                -
                Edité par unchained77 20 juin 2016 à 17:21:07

                • Partager sur Facebook
                • Partager sur Twitter
                  6 décembre 2017 à 18:25:35

                  Est-ce la bonne façon de calculer l’âge

                  function calculer() { var jj; var mm; var aa; if(f.jour.value<=0 || f.jour.value>31 || f.mois.value<=0 || f.mois.value>12 || f.annee.value<=0 ) alert("Erreur dans la date de naissance"); else { jj=eval(f.j.value)-eval(f.jour.value) mm=eval(f.m.value)-eval(f.mois.value) aa=eval(f.a.value)-eval(f.annee.value) if(jj<0) { jj=jj+30 mm=eval(f.m.value)-1 } else if(mm<0) { { mm=mm+12 aa=eval(f.a.value)-1 } } f.Resultat.value="ans "+aa+"/ mois "+mm+"/ jour "+jj }

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Calcul âge d'après date de naissance

                  × 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