Âge à partir date naissance

Résolu
Étienne9 Messages postés 1090 Statut Membre -  
jeremy.s Messages postés 1248 Statut Membre -
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. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
     
    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);
    0
    1. Utilisateur anonyme
       
      Oui, il faut connaitre mktime pour cela :)
      0
    2. Étienne9 Messages postés 1090 Statut Membre 49
       
      Le problème c'est que votre fonction n'est pas précise... Un mois ne fait pas toujours 365 jours...
      0
    3. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      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.
      0
    4. Étienne9 Messages postés 1090 Statut Membre 49
       
      Et ma solution ne marche pas ?
      0
    5. Utilisateur anonyme
       
      Votre solution marche parfaitement.
      0
  2. jeremy.s Messages postés 1248 Statut Membre 79
     
    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)
    0
    1. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      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.
      0
    2. jeremy.s Messages postés 1248 Statut Membre 79
       
      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
      0
    3. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      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.
      0
    4. jeremy.s Messages postés 1248 Statut Membre 79
       
      A ton service ;-)
      0
    5. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      C'est pas moi qui demandait de l'aide sur ce sujet ^^
      0