Probleme calcul date
Résolu
moon136
Messages postés
80
Statut
Membre
-
moon136 Messages postés 80 Statut Membre -
moon136 Messages postés 80 Statut Membre -
Bonjour,
Salut dans le script ya un soucis de date.par exemplar quand on rentre la date du 01/01/2000, on se rend compte que le calcul n'est pas correct : il indique 16 ans et pas 17ans.
Merci de votre aide
Salut dans le script ya un soucis de date.par exemplar quand on rentre la date du 01/01/2000, on se rend compte que le calcul n'est pas correct : il indique 16 ans et pas 17ans.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Calcul de l'âge</title> <script language="JavaScript"> function CheckDate(d) { var amin=1900; var amax=2500; 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."); ok=0; } if ( ((isNaN(m))||(m<1)||(m>12)) && (ok==1) ) { alert("Le mois n'est pas correct."); ok=0; } if ( ((isNaN(a))||(a<amin)||(a>amax)) && (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 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.getYear(); if (a2<=100) {a2=1900+a2} if ( (j!=j2)||(m!=m2)||(a!=a2) ) { ok=0; } ok=d2; } return ok; } function tjs_age() { var dt_naissance = document.getElementById("dt_naissance"); var dt = dt_naissance.value; var d = CheckDate(dt); var m = new Date(); var age=""; var age_a=0;var age_m=0; if (d!=0) { if (d.getTime()>m.getTime()) { age="La date de naissance est supérieure à la date du jour !"; dt_naissance.focus(); } age_a = m.getFullYear()-d.getFullYear(); m.setYear(d.getYear()); if ((d.getTime()>m.getTime())&&(d.getMonth()-m.getMonth()!=0)) {age_a--;} if (d.getMonth() >= m.getMonth()) { age_m = 12 - (d.getMonth()-m.getMonth()) } else { age_m = (m.getMonth()-d.getMonth()) } if (age_m==12) {age_m=0;} if (age_a==1) { age=age_a+" an"} if (age_a>1) { age=age_a+" ans"} if ((age_a>0)&&(age_m>0)) {age+=" et "} if (age_m>0) {age+=age_m+" mois"} if (age=="") { age="moins de 1 mois"} age = 'Age = '+age; if (age_a>0 && d.getDate()==m.getDate() && d.getMonth()==m.getMonth()) { age= "Joyeux Anniversaire\n"+age;} } else { dt_naissance.focus(); } alert(age); } window.addEventListener("load", function () { document.getElementById("envoyer").addEventListener("click", tjs_age); }); </script>
</head> <body> <center> <big><b>Calcul de l'âge</b></big> </center> <br> <form name="formage"> Entrez votre date de naissance (JJ/MM/AAAA) : <input id="dt_naissance" name="dt_naissance" size="10" maxlength="10" type="text"> <input value="Calcul de l'âge" type="button" id="envoyer"> </form> </body> </html>
Merci de votre aide
A voir également:
- Probleme calcul date
- Calcul moyenne excel - Guide
- Calcul km marche à pied gratuit - Télécharger - Sport
- Calcul charpente bois gratuit - Télécharger - Architecture & Déco
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Calcul nombre de jours entre deux dates excel - Guide
3 réponses
Bonjour,
Je n'ai pas tout compris à ton raisonnement, et notamment au m.setYear.
Je te déconseille d'utiliser une même variable pour gérer plusieurs informations différentes (tu le fais sur ce "m", tu le fais aussi plus haut avec le "ok"). Et nomme tes variables de façon explicite, tu t'y perdras moins.
De façon générale, pour calculer l'âge d'une personne, on regarde les jours du mois : si le jour anniversaire est inférieur au jour courant, on fait la différence ; sinon, on prend le complément à 30 et on enlève un mois.
Puis on regarde les mois, de la même manière.
Puis on calcule la différence en années.
Il y a quelques temps j'avais codé exactement la même fonction, tiens, j'ai retrouvé mon code :
Je n'ai pas tout compris à ton raisonnement, et notamment au m.setYear.
Je te déconseille d'utiliser une même variable pour gérer plusieurs informations différentes (tu le fais sur ce "m", tu le fais aussi plus haut avec le "ok"). Et nomme tes variables de façon explicite, tu t'y perdras moins.
De façon générale, pour calculer l'âge d'une personne, on regarde les jours du mois : si le jour anniversaire est inférieur au jour courant, on fait la différence ; sinon, on prend le complément à 30 et on enlève un mois.
Puis on regarde les mois, de la même manière.
Puis on calcule la différence en années.
Il y a quelques temps j'avais codé exactement la même fonction, tiens, j'ai retrouvé mon code :
function calculeAgeTextuel(naissance, jourJ, avecAnniversaire, pronom) { var resultat = ""; var ageJours = 0; var ageMois = 0; var ageAnnees = 0; var offsetMois = 0; var offsetAnnees = 0; // Calcul de la partie "jours" de l’âge if (jourJ.getDate() >= naissance.getDate()) ageJours = jourJ.getDate() - naissance.getDate(); else { ageJours = nbJoursDuMois(jourJ.getMonth() - 1) - naissance.getDate() + jourJ.getDate(); offsetMois = -1; } // Calcul de la partie "mois" de l’âge if (jourJ.getMonth() >= naissance.getMonth()) ageMois = jourJ.getMonth() - naissance.getMonth(); else { ageMois = 12 - naissance.getMonth() + jourJ.getMonth(); offsetAnnees = -1; } ageMois = ageMois + offsetMois; // Calcul de la partie "années" de l’âge ageAnnees = jourJ.getYear() - naissance.getYear() + offsetAnnees; // réalignement mois while (ageMois < 0) { ageMois = 12 + ageMois; ageAnnees = ageAnnees - 1; } // Écriture du résultat var isJours = ageJours != 0; var isMois = ageMois != 0; var isAnnees = ageAnnees != 0; var texteJ = ""; var texteM = ""; var texteA = ""; if (isJours && (isMois || isAnnees)) texteJ = "et "; if (isJours) texteJ += ageJours + ((ageJours > 1) ? " jours" : " jour"); if (isAnnees && isMois && !isJours) texteM = "et "; if (isMois) texteM += ageMois + " mois"; if (isAnnees) texteA = ageAnnees + ((ageAnnees > 1) ? " ans" : " an"); resultat = texteA + " " + texteM + " " + texteJ; if (ageAnnees == 0 && ageMois == 0 && ageJours == 0) resultat = "naissance"; if (naissance > jourJ) resultat = "pas né"; if (avecAnniversaire) { var texteAnniversaire = ""; if (!isJours && !isMois) texteAnniversaire = "<br/>C'est " + pronom + " anniversaire !"; else if (!isJours) texteAnniversaire = "<br/> C'est " + pronom + " moiniversaire !"; resultat += texteAnniversaire; } return resultat; } function nbJoursDuMois(mois) { var resultat = 30; if (mois == -1) mois = 11; if (mois == 0 || mois == 2 || mois == 4 || mois == 6 || mois == 7 || mois == 9 || mois == 11) resultat = 31; if (mois == 1) resultat = 28; return resultat; }
Bonjour merci pour ta réponse je comprend mieux à présent. Je vais tester et je te dirais quand ce sera résolu. Je n'ai pas de pc en ce moment
Merci