11485 sujets

JavaScript, DOM et API Web HTML5

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> 


Merci de votre aide
Modifié par moon28 (17 Oct 2017 - 22:55)
Modérateur
m.setYear(d.getYear());

C'est par là

getYear et setYear sont à proscrire!

mour d => 01/01/2000

cela donne à m l'année 100 Smiley smile
Un peu hors sujet (quoi que) : pour la manipulation des dates en javascript mieux vaut passer par la lib' Moment.js.
Modifié par Olivier C (26 Sep 2017 - 14:58)
Modérateur
Olivier C a écrit :
Un peu hors sujet (quoi que) : pour la manipulation des dates en javascript mieux vaut passer par la lib' Moment.js.

toutafé +1 Smiley smile
Olivier C a écrit :
Un peu hors sujet (quoi que) : pour la manipulation des dates en javascript mieux vaut passer par la lib' Moment.js.


+1 moment.js facilite tellement la chose
Modérateur
Olivier C a écrit :
Un peu hors sujet (quoi que) : pour la manipulation des dates en javascript mieux vaut passer par la lib' Moment.js.


+1


Sinon, pour résoudre ton bug, je pense que tu devrais commenter cette ligne (j'ai lu le sujet en Z et ne sais pas si la réponse a été donnée) :

m.setYear(d.getYear());
Merci a tous pour vos réponses je vais tester ça. Je n'ai pas accès à mon pc pas avant semaine prochaine. Mais j'essais de gagner du temps en cherchant sur tel c pas évident ... .

Je dois chercher alors
m.setYear(d.getYear());
sur cette ligne afin de corriger ce bug si je comprend bien ?
Smiley cligne
Modérateur
Oui, un indice: utiliser setFullYear et getFullYear. setYear et getYear sont obsolètes et ne doivent plus être utilisés, justement à cause de ce genre de bugs
Meilleure solution
kustolovic a écrit :
Oui, un indice: utiliser setFullYear et getFullYear. setYear et getYear sont obsolètes et ne doivent plus être utilisés, justement à cause de ce genre de bugs


Ok juste avant jai utiliser
age_a = m.getFullYear()-d.getFullYear();
		m.setYear(d.getYear());
		if /code].....

Donc je dois ajouter et corriger par [code=javascript]m.setFullYear(d.getFullYear());

?
Désolée je peux pas tester avant lundi ou mardi je n'ai pas accès à un pc mais c pour comprendre.

Merci Smiley cligne
en fait ce n'est pas encore resolu lorsque je rentre la date 10/10/2000 cela affiche 17 ans et pas 16 ans.
pourtant j'ai modifier dans function getAge

	age_a = m.getFullYear()-d.getFullYear();
		m.setFullYear(d.getFullYear());


je vois pas ou est le bug
Modifié par moon28 (03 Oct 2017 - 14:27)
Modérateur
parce que tu soustrais une année seulement si le mois est différent:


if ((d.getTime()>m.getTime())&&(d.getMonth()-m.getMonth()!=0)) {age_a--;}
kustolovic a écrit :
parce que tu soustrais une année seulement si le mois est différent:


if ((d.getTime()&gt;m.getTime())&amp;&amp;(d.getMonth()-m.getMonth()!=0)) {age_a--;}


j'ai pas bien compris le mois est toujours différent car chaque utilisateur entre une date différente, j'ai essayé ton code à la place de
		if ((d.getTime()>m.getTime())&&(d.getMonth()-m.getMonth()!=0)) {age_a--;}


le script n'est plus fonctionnel
Modifié par moon28 (03 Oct 2017 - 21:03)
Modérateur
moon28 a écrit :


j'ai pas bien compris le mois est toujours différent car chaque utilisateur entre une date différente, j'ai essayé ton code à la place de

je n'ai pas proposé de code j'ai mis ton code en exemple…

comprends-tu quelque chose à ce code? est-ce bien toi qui l'a écrit?

Si non je te conseillerait de tout balancer et d'utiliser moment.js …
Perso ça ne m'étonne pas que ça ne fonctionne pas avec des variables nommées d, t, m2, j2, ...
Modifié par bzh (04 Oct 2017 - 09:34)
kustolovic a écrit :

je n'ai pas proposé de code j'ai mis ton code en exemple…

comprends-tu quelque chose à ce code? est-ce bien toi qui l'a écrit?

Si non je te conseillerait de tout balancer et d'utiliser moment.js …


ce n'est pas moi qui l'ait ecrit je l'ai trouvé sur internet et je l'ai modifié cr en effet il y a des erreurs et des bugs
bzh a écrit :
Perso ça ne m'étonne pas que ça ne fonctionne pas avec des variables nommées d, t, m2, j2, ...


Ok je vais essayer de changer ça