CALCULE D'AGE

Tanaka56 Messages postés 124 Date d'inscription samedi 8 avril 2006 Statut Membre Dernière intervention 29 janvier 2009 - 20 févr. 2007 à 12:11
matheret Messages postés 2 Date d'inscription mercredi 10 août 2005 Statut Membre Dernière intervention 24 mars 2010 - 24 mars 2010 à 09:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/16325-calcule-d-age

matheret Messages postés 2 Date d'inscription mercredi 10 août 2005 Statut Membre Dernière intervention 24 mars 2010
24 mars 2010 à 09:22
meilleur code :
<HTML>
<HEAD><TITLE>Calcul de l'âge</TITLE>
<SCRIPT LANGUAGE= "JavaScript"><!--
function CheckDate(d) {
// Cette fonction vérifie le format JJ/MM/AAAA saisi et la validité de la date.
// Le séparateur est défini dans la variable separateur
var amin=1850; // année mini
var amax=2500; // année maxi
var separateur="/"; // separateur entre jour/mois/annee
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))||(aamax)) && (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<=1900)
a2=1900+a2;
if ( (j!=j2)||(m!=m2)||(a!=a2) ) {
alert("La date "+d+" n'existe pas !");
ok=0;
}
else
ok=d2;
}
return ok;
}
function tjs_age(dt) {
return tjs_age2(dt, new Date());
}
function isleapyear(year)
{
if(year % 4 != 0)
return 0;
if(year % 100 != 0)
return 1;
if(year % 400 != 0)
return 0;
return 1;
}
function tjs_age2(dt, auj) {
// Cette fonction retourne une chaîne de type :
// "15 ans et 6 mois"
var d=CheckDate(dt);
var age=""; var age_a=0;var age_m=0;
if (d != 0) {
if (d.getTime() > auj.getTime()) {
age = "La date de naissance est supérieure à la date du jour !";
}
else {
auj0 = (auj.getFullYear() * 12) + auj.getMonth();
d0 = (d.getFullYear() * 12) + d.getMonth();
if (auj.getDate() < d.getDate()) {
age_m = auj0 - d0 - 1;
var NBDAYSPREVMONTH = new Array (31, 31, 28+isleapyear(auj.getFullYear()), 31, 30, 31, 30, 31, 31, 30, 31, 30);
age_d = auj.getDate() + Math.max(0, NBDAYSPREVMONTH[auj.getMonth()] - d.getDate());
}
else {
age_m = auj0 - d0;
age_d = auj.getDate() - d.getDate();
}
age_a = parseInt( age_m / 12 );
age_m %= 12;
age_s = parseInt( age_d / 7 );

if (age_a > 0) {
if (age_a > 1)
age = age_a + " ans";
else
age = "1 an";
}

if ((age_a < 2) && (age_m > 0)) {
if (age != "")
age += " et ";
age += age_m + " mois";
}

if ((age_a < 1) && (age_s > 0)) {
if (age != "")
age += " et ";
if (age_s == 1)
age += "1 semaine";
else
age += age_s + " semaines";
}

if (age == "") {
if (age_d == 1)
age = "1 jour";
else
age = age_d + " jours";
}
}
}
return age;
}
// -->
</SCRIPT>
</HEAD>

<CENTER> Calcul de l'âge </CENTER>

<FORM name ="formage">
Entrez votre date de naissance (JJ/MM/AAAA) :

Aujourd'hui (JJ/MM/AAAA) :

</FORM>

Ce script contient 2 fonctions :

CheckDate() qui vérifie la validité de la date

tjs_age() qui retourne une chaîne de caractères de type "15 ans et 6 mois" ou "8 mois" ou "1 an"

(c) Olivier Matheret 2010

</HTML>
matheret Messages postés 2 Date d'inscription mercredi 10 août 2005 Statut Membre Dernière intervention 24 mars 2010
2 mars 2010 à 15:04
Déjà il faut modifier : if (a2<=1900) {a2=1900+a2}
puis enlever 2 fois document.formage.dt_naissance.focus() qui n'ont rien à faire là
puis modifier le coeur pour prendre en compte le jour dans le mois... en faisant attention au 29 février

ça donne ça :
<SCRIPT LANGUAGE="JavaScript"><!--
function CheckDate(d) {
// Cette fonction vérifie le format JJ/MM/AAAA saisi et la validité de la date.
// Le séparateur est défini dans la variable separateur
var amin=1850; // année mini
var amax=2500; // année maxi
var separateur="/"; // separateur entre jour/mois/annee
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))||(aamax)) && (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<=1900)
a2=1900+a2;
if ( (j!=j2)||(m!=m2)||(a!=a2) ) {
alert("La date "+d+" n'existe pas !");
ok=0;
}
else
ok=d2;
}
return ok;
}
function tjs_age(dt) {
return tjs_age2(dt, new Date());
}
function tjs_age2(dt, auj) {
// Cette fonction retourne une chaîne de type :
// "15 ans et 6 mois"
var d=CheckDate(dt);
var age=""; var age_a=0;var age_m=0;
if (d != 0) {
if (d.getTime() > auj.getTime()) {
age = "La date de naissance est supérieure à la date du jour !";
}
else {
auj0 = (((auj.getFullYear() * 12) + auj.getMonth()) * 31) + auj.getDate();
d0 = (((d.getFullYear() * 12) + d.getMonth()) * 31) + d.getDate();
age0 = auj0 - d0;
age_a = parseInt( age0 / (12*31) );
age_m = parseInt( (age0 % (12*31)) / 31 );
age_d = age0 % 31;
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 d'un mois";
}
}
return age;
}
// -->
</SCRIPT>
Tanaka56 Messages postés 124 Date d'inscription samedi 8 avril 2006 Statut Membre Dernière intervention 29 janvier 2009
20 févr. 2007 à 12:11
Bonjour. Beaucoup ont vu cette source et aucun n'a mit de commentaire.
Je rencontre un problème. J'entre une date de naissance : 28/02/1989, la date du jour étant 20/02/2007 le calcul trouve 18 ans. Et bien non, il aura 18 ans dans 8 jours.
J'aurais voulu mettre ce script dans une page web mais il faut que le calcul soit précis. Sans doute une modif à faire. Cordialement
Rejoignez-nous