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

Attention, cet article a été déplacé dans les archives, donc le contenu peut ne plus être à jour. A vous de voir 🙂

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 )

<?php
function age($annee_naissance, $mois_naissance, $jour_naissance, $timestamp = '') {

    // Si on veut vérifier à la date actuelle ( par défaut )
    if (empty($timestamp)) {
        $timestamp = time();
    }

    // On evalue l'age, à un an par exces
    $age = date('Y', $timestamp) - $annee_naissance;

    // On retire un an si l'anniversaire n'est pas encore passé
    if ($mois_naissance > date('n', $timestamp) || ($mois_naissance == date('n', $timestamp) && $jour_naissance < date('j', $timestamp))) {
        $age--;
    }

    return $age;
}

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

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);
    }