begin process at 2012 05 27 21:21:51
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date / Heure

 > FONCTION QUI RETOURNE L'AGE AVEC LE JOUR/MOIS/ANNÉE DE NAISSANCE

FONCTION QUI RETOURNE L'AGE AVEC LE JOUR/MOIS/ANNÉE DE NAISSANCE


 Information sur la source

Note :
Aucune note
Catégorie :Date / Heure Classé sous :age, date, naissance, time Niveau :Débutant Date de création :23/02/2007 Date de mise à jour :25/02/2007 14:30:28 Vu :9 541

Auteur : Thomas Dellasantina

Ecrire un message privé
Site perso
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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

  • <?
  • /* --------------------------------------------------------------
  • 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;
  • }
  • ?>
<?

/* --------------------------------------------------------------
     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! :)


 Historique

23 février 2007 21:57:52 :
J'ai oublié de fermer un commentaire
23 février 2007 22:38:53 :
correction bug
25 février 2007 13:51:18 :
Correction fonction "EstBissextile"
25 février 2007 14:30:28 :
Correction bug encore

 Sources de la même categorie

Source avec une capture AGENDA GRAPHIQUE SIMPLE (DÉBUTANT) À INTÉGRER par NicomakM
CALCUL DU NOMBRE DE JOURS CONTENUS DANS L'INTERSECTION DE DE... par curphey
CALENDRIER EN 70 LIGNES par tchconst
Source avec Zip CALENDRIER par gabay
CALENDRIER SIMPLE par manuche

 Sources en rapport avec celle ci

CALCUL DU NOMBRE DE JOURS CONTENUS DANS L'INTERSECTION DE DE... par curphey
UNIX TIME CONVERTER (UTC) par tiger222
Source avec Zip FONCTION QUI CALCULE L'AGE A PARTIR D'UNE DATE DE NAISSANCE par italiasky
[PHP5] CLASSE DATE/HEURE par FhX
LA DATE DU MÊME JOUR, LE MOIS SUIVANT par masternico

Commentaires et avis

Commentaire de FhX le 24/02/2007 13:19:52

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 :)

Commentaire de vilhjalms le 24/02/2007 22:52:24

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á

Commentaire de vilhjalms le 24/02/2007 22:53:39

Saell og blesuð

Autrement j'approuve les remarques de FhX :)

Vilhjálms Sigurðsdóttir aka Frëyjá

Commentaire de Thomas Dellasantina le 25/02/2007 13:49:31

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... :)

Commentaire de webdeb le 25/02/2007 19:35:12

Au passage, les bonnes balises PHP c'est <?php et non <?

Commentaire de kankrelune le 26/02/2007 16:57:59

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... .. .

Commentaire de FhX le 26/02/2007 17:16:40

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 ^^

Commentaire de FhX le 26/02/2007 17:19:22

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 ^^)

Commentaire de linkid le 05/03/2007 21:28:04

Pourquoi ne pas mettre un OU alors ?

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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

format de date et time en c+ [ par tertulia ] comment modifier le format de la date c'est dire remplacer les / par - et de l'heure càd remlacer : par - voilac pour pouvoir creer un fichier avec la pb avec les date mysql [ par herveguedj ] j'ai une table qui doit stocker les ages des membres existe t il pas une autre moyen que dans le formaulaire il puissent rentrer leur date de naissanc Date avant 1970. [ par ckoo ] Bonjour tout le monde.Voila le pbl :je fais une appli avec gestion des utilisateurs. On peut saisir leur date de naissance. Quand on enregistre la dat date time [ par rigaudstar ] Bonjour à tous, Alors voila j'ai programmé tant bien que mal des pages en php qui cherche leur info dans une base access. L'une de ces info est l'affi Fonctions et date [ par cseagle ] Bonjour,Je souhaite faire une fonctions qui me calcul les année depuis l'année actuelle jusqu'à il y a 80 ans. C'est pour l'année de naissance que je afficher age compris entre 2 valeur grace a une base sql help [ par guigui2mars ] hello voila je veux pouvoir grace a une date de naissance qui est inscrite dans la bas de donnée arrivé a afficher l'intervalle d'age ( ex 18 - 25 ans Vérifier si une date de naissance est valide [ par runan ] Bonjour, Je voudrais vérifier si une date à bien exister dans le passé genre : est-ce que le 29/02/1942 a existé ? Tout ça pour Probleme de date et mktime [ par cedriclomb ] Bonjour,Pourquoi ce code, retourne pour n'importe quelle valeur de $anneesel et $mois un $time different (ca c'est normal), mais un   date('t',$time) Planning [ par wylls22 ] Bonjour,J'ai un souci d'affichage que je ne parviens pas à résoudre.Je devrais afficher depuis une base de données dans un tableaux de planning repren calcul de l'age [ par Maheu ] Salut à tous!!Je suis newby en PhP et voudrai calculer un age a partir de deux dates (la date courante date() et une date de naissance au format dd-mm


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales