Âge à partir date naissance

Résolu
Étienne9 Messages postés 1022 Date d'inscription   Statut Membre Dernière intervention   -  
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   -
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

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