Calcul de l’age en php a partir d’une date de naissance
le 27 juin 2006 par sahid
Tutorial Php permettant le calcul d’un age à partir de sa date de naissance
Tout est dans le titre, voici une fonction permettant le calcul de l’age en Php, j’ai essayé de commenter un maximum le script, bon il n’y a rien de bien difficile, mais etant donné que j’ai vu la question sur un forum, je me suis dit que ça pouvait servir (:
-
function calculAge($jour, $mois, $annee){
-
/*
-
** mktime() - retourne le nombre de secondes entre le début de l’époque
-
UNIX (1er Janvier 1970 00:00:00 GMT) et le temps spécifié. **/
-
/*
-
** time() - retourne l’heure courante, mesurée en secondes depuis le début de l’époque
-
UNIX, (1er janvier 1970 00:00:00 GMT). **/
-
/*
-
** Donc, on a le nombre de secondes entre le 1er Janvier 70 et la date de
-
naissance, et le nombre de secondes depuis le 1er Janvier 70 et la date d’aujourd’hui,
-
On soustrait ces deux dates, et on a le nombre de secondes entre today et la date de
-
naissance. **/
-
$ageUnix = $nowDate - $unixDate;
-
/*
-
** Maintenant on convertit le nombre de secondes en année et
-
on arrondit le nombre obtenu **/
-
-
return $age;
-
}
-
-
$myAge = calculAge(17,11,1984);
-
print $myAge;
Bon, un petit souci, c que avant 1970 bah ca coince …
Tableau de bord




27 novembre 2007 at 14:16
Salut, en gros si on sait pas calculer l’age des personnes nées avant le 1/1/1970 bin elle sert à rien ta fonction ;)
12 mars 2008 at 5:38
Je tenais à te filer une fonction bien plus simple et qui fonctionne pour les age en dessou de 1970, fraichement codée lol :
function calcul_age($jour_naiss,$mois_naiss,$annee_naiss)
{
$debutYear = mktime(0,0,0,1,1,1980);
$T_timeYear = mktime(0,0,0,date(’d'),date(’m'),1980);
$B_timeYear = mktime(0,0,0,$jour_naiss,$mois_naiss,1980);
$age = date(’Y')-($annee_naiss);
$Dif_today = $debutYear - $T_timeYear;
$Dif_birthday = $debutYear - $B_timeYear;
if($Dif_today>$Dif_birthday) {$age=$age-1;}
return $age;
}
12 mars 2008 at 5:56
jvé la commentée quand meme :p desolé:
function calcul_age($jour_naiss,$mois_naiss,$annee_naiss)
{
#on prend le timestamp du 1er janvier 1980, on aurai pu prendre une autre année, c’est ce qui va nous servir de base pour les calculs#
$debutYear = mktime(0,0,0,1,1,1980);
#on prend le timestamp du jour et du mois d’aujourd’hui mais toujours de lannée 1980#
$T_timeYear = mktime(0,0,0,date(’d’),date(’m’),1980);
#on prend le timestamp du jour et du mois de naissance mais toujours de lannée 1980#
$B_timeYear = mktime(0,0,0,$jour_naiss,$mois_naiss,1980);
#on calcule l’age de base sans compter les jours dans un premier temps#
$age = date(’Y’)-($annee_naiss);
#grace aux timestamp de 1980 recuperés, on calcul un timestamp correspondan aux jours d’ecarts entre le 1er janvier 1980 et la “jour d’aujourdui” “mois aujourd’hui” 1980#
$Dif_today = $debutYear - $T_timeYear;
#meme chose pour la date d’anniv#
$Dif_birthday = $debutYear - $B_timeYear;
#si la difference entre le debut de lannée et de le jour d’anniversaire est superieure a la diference du debut de lannée au jour d’aujourdhui c’est que l’anniversaire n’est pas encore passé, donc on enleve 1 à l’age calculé au dessus#
if($Dif_today>$Dif_birthday) {$age=$age-1;}
return $age;
}
Voila jespere ke c plus clair LOL
28 mars 2008 at 19:32
Le script de André (en commentaire) est très bien pour ne pas se limiter à 1970 et prend en compte si l’anniversaire est passé ou non pour l’année en cours.
ATTENTION: ERREUR dans la fonction “mktime”:
$T_timeYear = mktime(0,0,0,date(’d’),date(’m’),1980);
$B_timeYear = mktime(0,0,0,$jour_naiss,$mois_naiss,1980);
Le jour et le mois doivent être inversés !! on doit avoir:
$T_timeYear = mktime(0,0,0,date(’m’),date(’d’),1980);
$B_timeYear = mktime(0,0,0,$mois_naiss,$jour_naiss,1980);
De plus, 1980 n’est pas pris complètement au hasard. Il doit s’agir d’une année bissextile (sinon, le 29/02/aaaa risque de ne pas exister et faire une erreur).
27 avril 2008 at 4:21
Modifier cette ligne:
if($Dif_today < $Dif_birthday) {$age=$age-1;}
27 avril 2008 at 4:40
mieux encore:
function age($naiss) {
list($jour, $mois, $annee) = split(’[/.]’, $naiss);
$today[’mois’] = date(’m');
$today[’jour’] = date(’d');
$today[’annee’] = date(’Y');
$annees = $today[’annee’] - $annee;
if ($today[’mois’] $today[’jour’])
$annees–;
}
else
$annees–;
}
echo $annees;
}
$monAge = age($dn);
19 septembre 2008 at 15:07
Voilà en une ligne une fonction sans faille :
function cdate($dt)
{
echo floor( ( time() - strtotime($dt) ) / (365.2422 * 24 * 60 * 60) );
}
Elle calcule bien évidemment l’âge des gens nés avant 1970, car tout le monde le sait, deux - (moins) font un + (plus).