Trouver l'âge exact en fonction d'une date de naissance.

J’ai créé récemment une fonction simple et efficace pour récupérer l’âge d’un membre à partir de cette date de naissance. Trop souvent, j’ai vu des scripts donnant un âge approximatif calculé à partir des années de naissance.
Donc voici ma création, qui récupère l’année de naissance, ainsi que le mois et le jour ( aux formats date ‘Y’, ‘n’ et ‘j’, donc 1999, 2000 … ; 1, 2, 3, …, 11, 12 et 1, 2, 3, …, 30, 31 )

 date('n', $timestamp) || ( $mois_naissance== date('n', $timestamp) && $jour_naissance > date('j', $timestamp)))
		$age--;

	return $age;
}

echo age('1987','9','11');
// Affichera 20
echo age(1987,9,11);
// Affichera 20
echo age('1987','09','11');
// Affichera 20
echo age(1987,09,11);
// Ne fonctionnera pas : mauvais format de date !
?>

à noter un paramètre optionnel : $timestamp, si vous souhaitez calculer un age à une date en particulier 😉
Si cette fonction vous est utile, c’est impeccable !
( Et si vous trouvez un bug quelconque, n’hésitez pas à me le signaler, merci 😉 )

Partager cet article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

  • Yep, ta fonction me parait bien 😉
    C’est marrant par contre j’utilise jamais empty, j’aurais plutôt eu tendance à mettre $timestamp=null par défaut, et à tester s’il était défini avec isset.
    J’ai fait presque la même chose pour EklaBlog, mais pas structuré de la même façon, enfin ça revient au même. D’ailleurs je m’en vais l’optimiser de ce pas :p

  • Salut, voilà comment j’aurais écrit la fonction :

    function age($annee_naissance, $mois_naissance, $jour_naissance, $timestamp = time()) {

    $age = date(‘Y’, $timestamp) – $annee_naissance;
    return ($mois_naissance > date(‘n’, $timestamp) || ( $mois_naissance == date(‘n’, $timestamp) && $jour_naissance > date(‘j’, $timestamp))) ? $age-1 : $age;
    }

    Je suis un adepte des if ternaires (qui n’existent malheureusement pas en python 🙁 )

  • Voila celle que j’utilise sur mon site (je l’ai modifiée pour accepter les même paramètre que la tienne) :

    function getAge($annee_naissance, $mois_naissance, $jour_naissance, $timestamp =  ») {
    $birth = $annee_naissance.str_pad($mois_naissance, 2, 0, STR_PAD_LEFT).str_pad($jour_naissance, 2, 0, STR_PAD_LEFT);
    if(empty($timestamp)) $timestamp = time();
    return floor((date(‘Ymd’,$timestamp)-$birth)/10000);
    }