PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 07-12-2009 07:38:43

cookie
Membre
Inscription : 07-12-2009
Messages : 7

Calculer age précis

Bonjour,

J'aimerais faire un script qui calcul précisément l'âge d'une personne en partant de sa date de naissance.
C'est assez facile avec la fonction mktime();

$diff = mktime(0, 0, 0, 7, 12, 2009) - mktime(0, 0, 0, 3, 3, 1982);

Mais avec cette méthode, je me retrouve avec un âge en secondes.

Comment faire pour obtenir un âge précis (nombre d'années, mois, jours) en tenant compte des années bissextiles des mois à 30 et 31 jours,...

Je précise que l'objectif du script est de calculer l'âge d'enfants en bas âge. Pas de problème de date avant 1970 donc...

D'avance merci pour vos conseils.

Hors ligne

#2 07-12-2009 14:01:01

renamed1
Membre
Inscription : 13-09-2009
Messages : 25

Re : Calculer age précis

Bonjour,
Voilà comment tu peu calculer l'age d'une personne en fonction de sa date de naissance
j'ai coder ça vite fais donc ce n'est pas très propre, je te laisse le nettoyer et retirer ce que tu n'a pas besoin

<?PHP
/* DATE DE NAISSENCE DE LA PERSONNE */
/********* MODIFIER LA DATE ICI OU REMPLACER LE PAR UNE VARIABLE comme $toto **********/
// SI TU UTILISE LE FORMAT 08-05-1988 ou 08/05/1988 Il TE SUFFIE DE REMPLACER LES / PAR -

$date_d_naissence = '08';
$date_m_naissence = '05';
$date_y_naissence = '1988';
$date_de_naissence = $date_d_naissence.'/'.$date_m_naissence.'/'.$date_y_naissence;

/* FORMAT DATE  */
// SI TU UTILISE LE FORMAT 08-05-1988 ou 08/05/1988 Il TE SUFFIE DE REMPLACER LES / PAR -
// explode '/' + date(d/m/y)

function Age($date_naissance)
 {
$arr1 = explode('/', $date_naissance);
$arr2 = explode('/', date('d/m/Y'));

if(($arr1[1] < $arr2[1]) || (($arr1[1] == $arr2[1]) && ($arr1[0] <= $arr2[0])))
return $arr2[2] - $arr1[2];
return $arr2[2] - $arr1[2] - 1;
}

$age = Age($date_de_naissence);

/* PETIT PLUS  */
// J'ai rajouter un ptit if si nous sommes bien le jour & le moi de la date de naissence
// on lui souhaite un bonne anniversaire
// SI TU UTILISE LE FORMAT 08-05-1988 ou 08/05/1988 Il TE SUFFIE DE REMPLACER LES / PAR -

if($date_d_naissence.'/'.$date_m_naissence == date("d").'/'.date("m"))
    {
      $date_anniversaire = 'Joyeux anniversaire ';
    }
 
echo $date_anniversaire.'vous avez '.$age.' ans';
?>

Hors ligne

#3 07-12-2009 18:56:45

cramj
Membre
Inscription : 02-11-2009
Messages : 15

Re : Calculer age précis

Voilà comment je ferais. Il y a peut-être moins tordu...

Utiliser :
le modulo (%) pour récupérer le reste de la division.
floor() pour arrondir à l'entier inférieur.
{édit} date('t') pour le nombre de jours dans le mois

Principe :
Diviser le nombre de secondes (ton $diff) par 60 pour l'avoir en « xx minutes : xx secondes »
réserver les secondes dans $sec
Diviser le nombre de minutes par 60 pour avoir en « xx hour : xx minutes »
réserver les minutes dans $min
etc... jusqu'à diviser le nombre de mois par 12 pour avoir « xx ans : xx mois »
et écrire l'âge : $an ans $mois mois ... et $sec secondes

tu peux aussi utiliser microtime() si tu veux plus précis big_smile

Dernière modification par cramj (07-12-2009 19:00:49)

Hors ligne

#4 07-12-2009 19:20:11

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Calculer age précis

>>Il y a peut-être moins tordu...

ha ça c'est sur big_smile:D:D
a++

Hors ligne

#5 07-12-2009 19:24:50

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Calculer age précis

Dans tous les cas vous ne réglez pas son problème de mois à 29-30-31 jours. ^_-

Hors ligne

#6 07-12-2009 19:49:26

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Calculer age précis

Je panse que cette date de naissance est stokée dans une table.
Donc, c'est tout simplement faisable avec une requête sql.
Voir datediff wink
a++

Hors ligne

#7 07-12-2009 23:33:31

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Calculer age précis

Avec des pansements aux dessins de petits noursons ?
Bon ok je sors...

Hors ligne

#8 08-12-2009 01:48:45

Ralph303
Membre
Lieu : St-Cyr l'Ecole
Inscription : 30-05-2009
Messages : 98
Site Web

Re : Calculer age précis

Moi, j'ai une solution que j'utilise et que j'ai piquée dans un bouquin:


  // Calcul de l'âge
 
  $day=intval($journaiss);
  $month=intval($moisnaiss);
  $year=intval($anneenaiss);
             
  $bdayunix=mktime(0, 0, 0, $month, $day, $year);
  $nowunix=time();
  $ageunix=$nowunix-$bdayunix;
  $age=floor($ageunix / (365*24*60*60));
 

Voilà...

Ralph303

Hors ligne

#9 08-12-2009 09:12:18

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : Calculer age précis

xTG a écrit :

Avec des pansements aux dessins de petits noursons ?

Wooow XTG .. je sais pas ce que c'est, mais vraisemblablement, c'est puissant ^^ lol


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#10 08-12-2009 09:17:51

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Calculer age précis

Bah c'est surtout que tout le monde lui répond mais sans lui donner de réponse qui résoudrai son problème alors je me lâche. sad
Faire une différence de date presque tout le monde sait le faire et je pense bien que ce n'était pas son soucis (en plus avec les 4 solutions "différentes" qu'on a dans ce topic...) mais cela ne règle en rien le problème du nombre de jours dans le mois courant...

Si on se trouve en mars vos algo vont afficher :
X années, 2 mois et N jours.
Or suivant que cela soit une année bissextile ou non cela sera pas N mais N-1 voire même N-2 car on gère encore moins le mois de février à 29jours...

Hors ligne

#11 08-12-2009 10:07:52

renamed1
Membre
Inscription : 13-09-2009
Messages : 25

Re : Calculer age précis

Voilà essai donc ça
elle prendre en compte les années bissextiles

source: JDN Développeur


<?PHP
function age($naiss)  {
  list($annee, $mois, $jour) = split('[-.]', $naiss);
  $today['mois'] = date('n');
  $today['jour'] = date('j');
  $today['annee'] = date('Y');
  $annees = $today['annee'] - $annee;
  if ($today['mois'] <= $mois) {
    if ($mois == $today['mois']) {
      if ($jour > $today['jour'])
        $annees--;
      }
    else
      $annees--;
    }
  echo $annees;
  }
age('1948-05-20')
?>

++

Dernière modification par wootzee (08-12-2009 10:08:25)

Hors ligne

#12 08-12-2009 13:12:56

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Calculer age précis

put1, tout ca pour trouver l'age roll
a++

Hors ligne

#13 08-12-2009 17:19:15

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Calculer age précis

Bon, j'me lance, puisque que personne ne veux t'aider wink

SELECT  xdate as DateDeNaissance,
  IF(CEILING(datediff(xdate,now())/365) > 0,CEILING(datediff(xdate,now())/365),CEILING(datediff(xdate,now())/365)*-1) as an,
  IF( MONTH(NOW()) - MONTH(xdate) > 0,MONTH(NOW()) - MONTH(xdate),0) as mois,
  IF( DAYOFMONTH(NOW())- DAYOFMONTH(xdate)>0,DAYOFMONTH(NOW())- DAYOFMONTH(xdate),0) as jours
FROM   `ta_table` where id=lid_de_l_enfant

a++

Hors ligne

#14 09-12-2009 09:37:41

renamed1
Membre
Inscription : 13-09-2009
Messages : 25

Re : Calculer age précis

roll Où personne ne veux regarder ?! ... (d'accord je sort)
Je ne vois pas en quoi le bous de code du JDN ne correspond pas à ce qui demande ?

JDN a écrit :

Cette fonction formatte le jour, le mois et l'année, puis compare les valeurs entre elles pour vérifier que le nombre d'années est exact.

cookie a écrit :

J'aimerais faire un script qui calcul précisément l'âge d'une personne en partant de sa date de naissance.

...

cookie a écrit :

Comment faire pour obtenir un âge précis (nombre d'années, mois, jours) en tenant compte des années bissextiles des mois à 30 et 31 jours,...

Cette fonction ne remplie pas les critères requis ?
@++ les amies !

Hors ligne

#15 09-12-2009 11:50:40

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Calculer age précis

>>Cette fonction ne remplie pas les critères requis ?

bah non roll


la preuve wink ->
[citation]
Comment faire pour obtenir un âge précis (nombre d'années, mois, jours)
[/citation]

Hors ligne

#16 09-12-2009 16:17:08

renamed1
Membre
Inscription : 13-09-2009
Messages : 25

Re : Calculer age précis

la pensé de woOtzee a écrit :

Humm....:rolleyes:

Je ne veux pas m'avancer [...] elle remplie la fonction, par défaut seul l'année est mis
ensuite il suiffe de rajouter la fonction pour le jour & le mois exemple :

 $jours= $today['jour'] - $jour;
 $mois= $today['jour'] - $moi;

Sans oublier de le rajouter dans l'écho big_smile

Dernière modification par wootzee (09-12-2009 16:17:57)

Hors ligne

#17 09-12-2009 16:27:54

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Calculer age précis

>>e ne veux pas m'avancer

tu s raison, ne t'avance pas big_smile:D


il suffit toujours de rajouter wink

et tu fais une fonction qui fais 20000000000 de lignes pour tout simplement calculer un age ???????????????

bah moi, je fait tout simplement une simple requête wink

a++

Hors ligne

Pied de page des forums