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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 651 fois - Téléchargée 20 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

FhX
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3 -
beaucoup d'optimisations possibles :)

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

>
function EstBissextile($annee) {
return ( $annee%4 == 0 && $annee%400 != 0 ) ? TRUE : FALSE;
}

# if($jour > $jour_actuel) // Un mois en moins
# $nbr_mois = 12 - ($mois - $mois_actuel) - 1;
# else
# $nbr_mois 12 - ($mois - $mois_actuel);
>
$nbr_mois = ( $jour > $jour_actuel ) ? 12 - ($mois - $mois_actuel) - 1 : 12 - ( $mois - $mois_actuel );

# for($i = 0 ; $i < $nbr_annees ; $i++)
# {
# $annee_i = $annee+$i;
# if(EstBissextile($annee_i))
# $age_en_jours += 366;
# else
# $age_en_jours += 365;
# }

>
for ( $i=0, $annee_i=$annee; $i<$nbr_annee; $i++, $annee++) {
$age_en_jours += ( EstBissextile($annee_i) ) ? 366 : 365;
}


Y'a de quoi faire :)
vilhjalms
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
1 -
Saell og blesuð

il me semblait que la verification du modulo de 100 etait egalement utile pour savoir si une annee etait bissextile ?

<?php
function EstBissextile ($annee) {
return (($annee % 4 == 0) && (($annee % 100 != 0) || ($annee % 400 == 0)));
}

$annee = 2002;
if (EstBissextile($annee)) {
echo $annee.' est bissextile.';
}else{
echo $annee.' n\'est pas bissextile.';
}
?>

Les années divisibles par 4 sont bissextiles, pas les autres.
Exception : les années divisibles par 100 ne sont pas bissextiles.
Exception à l'exception (!) : les années divisibles par 400 sont bissextiles.

Mais je me trompe peut etre ?

Vilhjálms Sigurðsdóttir aka Frëyjá
vilhjalms
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
1 -
Saell og blesuð

Autrement j'approuve les remarques de FhX :)

Vilhjálms Sigurðsdóttir aka Frëyjá
Thomas Dellasantina
Messages postés
1
Date d'inscription
vendredi 23 février 2007
Statut
Membre
Dernière intervention
25 février 2007
-
Oui en effet je me suis bien trompé...

(Source Wikipédia)
Depuis l'instauration du calendrier grégorien, sont bissextiles :
1. les années divisibles par 4 mais non divisibles par 100
2. les années divisibles par 400

Je corrige tout ça dans le code... :)
webdeb
Messages postés
509
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
31 mars 2009
2 -
Au passage, les bonnes balises PHP c'est <?php et non <?

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.