Âge à partir date naissance

Résolu
Bonjour à tous,

J'ai créé ma propre fonction qui calcule l'âge à partir de la date de naissance mais je voulais savoir ce que vous en pensez.
function age($j,$m,$a) {
	$age = (date("Y")-$a-1);
	if ((date("m")) >= $m) {
		if ((date("m")) == $m) {
			if (date("d") >= $j) {
				$age = $age+1;
			}
		}
		else {
			$age = $age+1;
		}
	}
	return $age;
}


Merci beaucoup d'avance.

2 réponses

  1. Contributeur
    Salut,

    Je trouve ça compliqué, perso j'aurais fait un truc du genre :

    function age($birthdate) {
        return floor((time()-$birthdate)/(60*60*24*365));
    }
    
    $ddn = mktime(0,0,0,2,11,1985);
    echo age($ddn);
    1. Oui, il faut connaitre mktime pour cela :)
    2. Le problème c'est que votre fonction n'est pas précise... Un mois ne fait pas toujours 365 jours...
    3. Contributeur
      non tu as raison, un mois ne fait pas toujours 365 jours, en général il fait plutôt 30 ou 31 jours ^^
      Si t'y tiens, tu peux compter le nombre d'années bissextiles et rajouter un jour à chaque fois.
    4. Et ma solution ne marche pas ?
    5. Votre solution marche parfaitement.
  2. Salut,

    Tu peux voir avec l'objet DateTime peut être, a mon souvenir il y a pas mal de fonction pour récuperer l'écart entre deux dates (donc ta date de naissance, et la date du jour)
    1. Contributeur
      ouais mais ça ne prendra pas en compte les années bissextiles, il a pas tort sur ce point.

      Comparer des DateTime revient au même que ce que j'ai fait, sauf qu'on manipule des objets.
    2. Bah si, l'objet DateTime prend tout en compte, c'est basé sur des timestamp donc forcément les années bissextiles sont comptées
    3. Contributeur
      function age($birthdate) {
          $now = new DateTime('now');
          $interval = $birthdate->diff($now);
          return $interval->format('%y');
      }
      
      $ddn = new DateTime('1985-04-18');;
      echo age($ddn);


      ça a l'air d'être suffisamment précis en effet.
    4. A ton service ;-)
    5. Contributeur
      C'est pas moi qui demandait de l'aide sur ce sujet ^^