Fonction qui retourne l'age avec le jour/mois/année de naissance

0/5 (9 avis)

Snippet vu 12 516 fois - Téléchargée 22 fois

Contenu du snippet

Ce code peut être utile pour retourner l'âge d'un membre sur votre site ou sur votre forum par exemple.
Je tiens à signaler que cette fonction fait appelle à une autre fonction que j'ai créée (pas très compliquée) qui retourne 1 si l'année est bissextile; je mettrai cette fonction au début.
Sinon ce n'est qu'un gros délire de ma part en effet des fois je m'ennui et je code un peu en php.

Source / Exemple :


<?

/* --------------------------------------------------------------
     FONCTION EstBissextile POUR SAVOIR SI L'ANNEE EST BISSEXTILE
   -------------------------------------------------------------- */

function EstBissextile($annee) // RETOURNE 1 SI L'ANNEE EST BISSEXTILE
{
	if($annee%4 == 0 AND $annee%100 != 0 OR $annee%400 == 0)
		$bissextile = 1;
	else
		$bissextile = 0;
	
	return $bissextile;
}

/* --------------------------------------------------------------
     FONCTION PRINCIPALE (RETOUNE L'AGE)
   -------------------------------------------------------------- */

function AgeJours($jour,$mois,$annee) // RETOURNE L'AGE (ans/mois et en jours) EN UTILISANT LE JOUR/MOIS/ANNEE DE LA DATE DE NAISSANCE
{
	$age_en_jours = 0;
	
	$annee_actuelle = date('Y');
	$mois_actuel = date('m');
	$jour_actuel = date('j');
	$num_jour_actuel = date('z');
	
	$nbr_annees = $annee_actuelle - $annee;
	
	// On crée "timestamp_anniversaire" pour connaitre le numéro du jour de l'anniversaire
	if(EstBissextile($annee))
	{
		$timestamp_anniversaire = mktime(0, 0, 0, $mois, $jour, 1996); // 1996 est bissextile
		$nbr_jour_annee = 366;
	}
	else
	{
		$timestamp_anniversaire = mktime(0, 0, 0, $mois, $jour, 1997); // 1997 n'est pas bissextile
		$nbr_jours_annee = 365;
	}
		
	$num_jour_anniv = date('z',$timestamp_anniversaire); // Numéro du jour de la naissance
	
	if($mois > $mois_actuel) // On ne prend pas en compte l'année en cours
	{
		$nbr_annees--;
		
		if($jour > $jour_actuel) // Un mois en moins
			$nbr_mois = 12 - ($mois - $mois_actuel) - 1;
		else
			$nbr_mois = 12 - ($mois - $mois_actuel);
	}
	elseif($mois < $mois_actuel) // On prend en compte l'année actuelle
	{
		$nbr_mois = $mois_actuel - $mois;
		
		if($jour > $jour_actuel) // Un mois en moins
			$nbr_mois--;
	}
	elseif($mois == $mois_actuel) // On vérifie le jour du mois
	{
		if($jour > $jour_actuel) // On ne prend pas en compte l'année en cours
		{
			$nbr_annees--;
			$nbr_mois = 11;
		}
		else
			$nbr_mois = 0;
	}
	
	$age_en_jours += ($nbr_jours_annee - $num_jour_anniv + $num_jour_actuel)%$nbr_jours_annee;
	
	for($i = 0 ; $i < $nbr_annees ; $i++)
	{
		$annee_i = $annee+$i;
		if(EstBissextile($annee_i))
			$age_en_jours += 366;
		else
			$age_en_jours += 365;
	}
	
	$age = $nbr_annees.' ans et '.$nbr_mois.' mois ('.$age_en_jours.' jours)';
	
	return $age;
}

?>

Conclusion :


Il s'agit d'une fonction à laquelle il faut fournir 3 arguments : le jour de la naissance, le mois et l'année (je pense que vous l'auriez compris tout seuls...).
La date de naissance n'est pas limité au 1er janvier 1970, on peut mettre le 1er janvier 0 par exemple, mais la date doit être cohérente (pas de 250 février 2000 par exemple).

J'ai développé cette fonction pour mon site (http://fousland.free.fr/) auquel je suis en train de coder un nouveau forum.

A bientôt! :)

A voir également

Ajouter un commentaire Commentaires
cs_linkid Messages postés 100 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 8 mai 2009
5 mars 2007 à 21:28
Pourquoi ne pas mettre un OU alors ?

function EstBissextile($annee) {
return ( (int) $annee%4 === 0 OR $annee%400 !== 0 );
}
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
26 févr. 2007 à 17:19
Pour faire vraiment optimisé, il faudrait voir si $annee%4 === 0 renvoit plus souvent FALSE que $annee%400 !== 0.

Car si c'est $annee%400 !== 0 qui fait plus souvent FALSE, il faut la placer en première dans l'instruction. Un FALSE dans un ET renvoit toujours FALSE et les instructions qui suivent ne sont pas exécuté du tout.

D'où un petit gain en performance :p
(jme change en Antho ^^)
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
26 févr. 2007 à 17:16
rho oui en plus :p
Quel boulet ^^

Pour faire vraiment épuré, ca donnerait un truc dans le genre :

function EstBissextile($annee) {
return ( (int) $annee%4 === 0 && $annee%400 !== 0 );
}

7 lignes en 1 seule :)
C'est beau la prog par moment ^^
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
26 févr. 2007 à 16:57
function EstBissextile($annee) {
return ( $annee%4 == 0 && $annee%400 != 0 ) ? TRUE : FALSE;
}


Rooooooo... FhX voyons... .. .

function EstBissextile($annee)
{
return (($annee%4) === 0 && ($annee%400) !== 0);
}

@ tchaOo°

ps : perso je rajouretais un cast au début de la fonction... .. .
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
25 févr. 2007 à 19:35
Au passage, les bonnes balises PHP c'est <?php et non <?
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.