Partage
  • Partager sur Facebook
  • Partager sur Twitter

calculer l'age a partir de la date de naissance

    12 mai 2009 à 20:20:03

    salut.
    je veux une fonction qui calcule l'age à partir de la date de naissance.
    lorsque j'entre la date de naissance j'aurai l'age.
    quelqu'un peut m'aider?
    :(
    • Partager sur Facebook
    • Partager sur Twitter
      12 mai 2009 à 20:22:55

      <?php
      
      $date = "2009-05-11";
      $age = (time() - strtotime($date)) / 3600 / 24 / 365;
      
      ?>
      
      • Partager sur Facebook
      • Partager sur Twitter
        12 mai 2009 à 20:34:41

        je vais détaillé un peu:
        j'ai un formulaire dont je vais remplir les champs,et parmi ces champs j'ai la date de naissance.
        lorsque je le remplie dans une autre page je vais appeler la variable age(par exemple) pour avoir l'age de cette personne.
        • Partager sur Facebook
        • Partager sur Twitter
          12 mai 2009 à 20:42:30

          Ben à partir de ce que je t'ai donné c'est instantanné :)
          <?php
          
          function age($date)
          {
            return (int) ((time() - strtotime($date)) / 3600 / 24 / 365);
          }
          
          echo age("29/05/1975");
          
          ?>
          
          • Partager sur Facebook
          • Partager sur Twitter
            12 mai 2009 à 20:44:12

            Caerbannog: drôle de méthode pour calculer un age. La question c'etait pas "comment calculer un age à peu près"...


            Tracker.
            • Partager sur Facebook
            • Partager sur Twitter
              12 mai 2009 à 20:48:15

              Tu as une date que tu va pouvoir transformer en timestamp avec la fonction strtotime() ou mktime() par exemple. On peut savoir quel est le timestamp actuel sur le serveur avec time().

              On soustrait le timestamp actuel avec le timestamp de la date de naissance. Tu obtient alors le nombre de secondes, au jour près, qui se sont écoulées durant la vie de la personne. Tu converti les secondes en années, mois, jours et le tour et joué !
              • Partager sur Facebook
              • Partager sur Twitter
              Don't be serious but do it seriously.
              Anonyme
                12 mai 2009 à 20:50:18

                je viens de voir sa en clikant sur une banniere je pense que sa peut t'aider .
                http://www.clicdesign.fr/codes.php
                sources : Clicky
                • Partager sur Facebook
                • Partager sur Twitter
                  12 mai 2009 à 20:57:20

                  RPGamer: un age se calcule avec un calendrier...


                  Tracker.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 mai 2009 à 21:02:45

                    Citation : Tracker

                    Caerbannog: drôle de méthode pour calculer un age. La question c'etait pas "comment calculer un age à peu près"...


                    Tracker.



                    Ok en remplaçant par 365.242 et en se souvenant que c'est une date américaine qu'il demande pour le format 12/31/2009, c'est valide à un jour près.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 mai 2009 à 21:28:04

                      @Caerbannog:

                      <?php
                      function age($date)
                      {
                        $d = strtotime($date);
                        echo strftime('%a %d %b %Y', $d).' > ';
                        return (int) ((time() - $d) / 3600 / 24 / 365.242);
                      }
                      header('content-type: text/plain; charset=utf8');
                      
                      echo age('05/10/1920')."\n";
                      echo age('05/11/1920')."\n";
                      echo age('05/12/1920')."\n";
                      echo age('05/13/1920')."\n";
                      echo age('05/14/1920')."\n";
                      


                      résultat:
                      Mon 10 May 1920 > 89
                      Tue 11 May 1920 > 89
                      Wed 12 May 1920 > 89
                      Thu 13 May 1920 > 89 
                      Fri 14 May 1920 > 88


                      On est le 12/05, comment tu expliques ??

                      Citation

                      [...] c'est valide à un jour près


                      Tu veux dire quoi exactement ?? que c'est parfois faux ?


                      Tracker.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 mai 2009 à 21:31:25

                        Citation : Tracker

                        RPGamer: un age se calcule avec un calendrier...


                        Ouais pourquoi pas, tu as un exemple court ?

                        Citation : Caerbannog

                        Ok en remplaçant par 365.242 et en se souvenant que c'est une date américaine qu'il demande


                        Ouais, soit tu converti la date, soit tu la découpe et la passe à mktime(). Après effectivement, plus la donnée du nombre de secondes dans une année est précise, plus tu auras une valeur correct étant donnée que l'âge de la personne est généralement donnée en années ^^
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Don't be serious but do it seriously.
                          12 mai 2009 à 21:43:02

                          <?php
                          function age($date)
                          {
                            $dna = strtotime($date);
                            $now = time();
                            
                            $age = date('Y',$now)-date('Y',$dna);
                            if(strcmp(date('md', $dna),date('md', $now))>0) $age--;
                          
                            return $age; 
                          }
                          header('content-type: text/plain; charset=utf8');
                          
                          echo age('05/10/1920')."\n";
                          echo age('05/11/1920')."\n";
                          echo age('05/12/1920')."\n";
                          echo age('05/13/1920')."\n";
                          echo age('05/14/1920')."\n";
                          


                          Tracker.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            12 mai 2009 à 21:45:20

                            Citation : Tracker

                            @Caerbannog:

                            <?php
                            function age($date)
                            {
                              $d = strtotime($date);
                              echo strftime('%a %d %b %Y', $d).' > ';
                              return (int) ((time() - $d) / 3600 / 24 / 365.242);
                            }
                            header('content-type: text/plain; charset=utf8');
                            
                            echo age('05/10/1920')."\n";
                            echo age('05/11/1920')."\n";
                            echo age('05/12/1920')."\n";
                            echo age('05/13/1920')."\n";
                            echo age('05/14/1920')."\n";
                            



                            résultat:

                            Mon 10 May 1920 > 89
                            Tue 11 May 1920 > 89
                            Wed 12 May 1920 > 89
                            Thu 13 May 1920 > 89 
                            Fri 14 May 1920 > 88



                            On est le 12/05, comment tu expliques ??

                            Citation

                            [...] c'est valide à un jour près


                            Tu veux dire quoi exactement ?? que c'est parfois faux ?


                            Tracker.



                            Les années bissextiles sont régulièrement espacées donc y'a au plus un jour de décalage si le mec est né au mauvais moment. Et sinon ils auraient pas foutu d'année bissextile là.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              12 mai 2009 à 21:50:08

                              @Tracker : merci pour les lignes, ça peut être utile ^^

                              @Caerbannog : tu as date("L") pour savoir si il s'agit d'une année bissextile ou pas.

                              Et si jamais :

                              Citation : Calculatrice Google

                              1 année = 31 556 926 secondes

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Don't be serious but do it seriously.
                                12 mai 2009 à 21:52:09

                                L'age n'est pas une fonction linaire donc faut arréter avec les divisions...


                                Tracker.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  12 mai 2009 à 21:56:45

                                  Salut,

                                  Citation : floflo530

                                  je viens de voir sa en clikant sur une banniere je pense que sa peut t'aider .
                                  http://www.clicdesign.fr/codes.php
                                  sources : Clicky


                                  Oui mais non :D , ce code ne fait pas ce qu'il faut. En fait, en faisant de nouveaux tests, je me suis aperçu qu'il n'était finalement pas correct, je l'ai donc revu et corrigé (il faut que je fasse la mise à jour sur le site d'ailleurs). J'ai conçu ce code pour afficher l'âge d'un membre sur son profil, et faire en sorte qu'il prenne 1, le jour même de son anniversaire (comme sur le sdz en fait). Il prend en compte les années bissextiles, pour les membres nés un 29 Février.

                                  Donc voilà la correction :
                                  <?php
                                  //On définit le jour, mois et année actuels avec la fonction date() pour chacun d'eux.
                                  $jour = date('d');
                                  $mois = date('m');
                                  $annee = date('Y');
                                  $annee_bis = date('L');//Pour savoir si l'année actuelle est bissextile ou non. 1 si oui, 0 si non.
                                  $jour_bis = 29;
                                  $mois_bis = 02;
                                  //On définit le jour, mois et année de naissance de la personne, obtenus à l'aide de la requête
                                  $membre_jour_naiss = intval($resultat['membre_jour_naiss']);
                                  $membre_mois_naiss = intval($resultat['membre_mois_naiss']);
                                  $membre_annee_naiss = intval($resultat['membre_annee_naiss']);
                                  //Si l'année est bissextile, pour ceux qui sont nés un 29 février et où l'anniversaire est passé.
                                  if (($membre_annee_naiss < $annee) && ($annee_bis == 1) && (($mois > $membre_mois_naiss) 
                                  || ($mois == $membre_mois_naiss && $jour >= $membre_jour_naiss)))
                                  {
                                  	$age1 = $annee - $membre_annee_naiss;
                                  	echo '<img src="../Images/membres/icones/anniversaire.gif" class="images_sans_bordure" /><strong> Âge : </strong>'.$age1.' ans.';
                                  }
                                  //Si l'année est bissextile, pour ceux qui sont nés un 29 février et où l'anniversaire n'est pas passé.
                                  elseif (($membre_annee_naiss < $annee) && ($annee_bis == 1) && (($mois < $membre_mois_naiss) 
                                  || ($mois == $membre_mois_naiss && $jour < $membre_jour_naiss)))
                                  {
                                  	$age2 = $annee - (++$membre_annee_naiss);
                                  	echo '<img src="../Images/membres/icones/anniversaire.gif" class="images_sans_bordure" /><strong> Âge : </strong>'.$age2.' ans.';
                                  }
                                  //Si l'année n'est pas bissextile, pour ceux qui sont nés un 29 février et où l'anniversaire est passé.
                                  elseif (($membre_annee_naiss < $annee) && ($annee_bis == 0) && ($membre_jour_naiss == $jour_bis) && ($jour == 28) && ($membre_jour_naiss > $jour) 
                                  && ($membre_mois_naiss == $mois_bis) && ($mois >= $mois_bis) && ($membre_mois_naiss <= $mois))
                                  {
                                  	$age1 = $annee - $membre_annee_naiss;
                                  	echo '<img src="../Images/membres/icones/anniversaire.gif" class="images_sans_bordure" /><strong> Âge : </strong>'.$age1.' ans.';
                                  }
                                  //Si l'année n'est pas bissextile, pour ceux qui sont nés un 29 février et où l'anniversaire n'est pas passé.
                                  elseif (($membre_annee_naiss < $annee) && ($annee_bis == 0) && ($membre_jour_naiss == $jour_bis) && ($jour < 28) && ($membre_jour_naiss < $jour) 
                                  && ($membre_mois_naiss <= $mois_bis) && ($mois <= $mois_bis) && ($membre_mois_naiss <= $mois))
                                  {
                                  	$age2 = $annee - (++$membre_annee_naiss);
                                  	echo '<img src="../Images/membres/icones/anniversaire.gif" class="images_sans_bordure" /><strong> Âge : </strong>'.$age2.' ans.';
                                  }
                                  //On a le cas ici, où l'anniversaire est passé..
                                  elseif ($membre_annee_naiss < $annee && (($mois > $membre_mois_naiss) 
                                  || ($jour > $membre_jour_naiss) 
                                  || ($mois == $membre_mois_naiss && $jour == $membre_jour_naiss)))
                                  {
                                  				
                                  	$age1 = $annee - $membre_annee_naiss;
                                  	echo '<img src="../Images/membres/icones/anniversaire.gif" class="images_sans_bordure" /><strong> Âge : </strong>'.$age1.' ans.';
                                  }
                                  else //Sinon, Si l'anniversaire n'est pas passé.
                                  {
                                  	$age2 = $annee - (++$membre_annee_naiss);
                                  	echo '<img src="../Images/membres/icones/anniversaire.gif" class="images_sans_bordure" /><strong> Âge : </strong>'.$age2.' ans.';
                                  }
                                  ?>
                                  

                                  Il y a peut-être moyen de faire plus simple ou autre, mais j'ai surtout fait comme j'ai pu avec mes modestes connaissances ^^ .

                                  Edit : J'ai fait la mise à jour sur mon site :) .
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Auto-entrepreneur infographiste (créations graphiques, mises en page). Mon site Internet. Demandeuse d'emploi.

                                    12 mai 2009 à 21:57:32

                                    En fait ma principale erreur c'est pour les mecs plus vieux que 1970, ce qui existe encore malheureusement...

                                    Et la solution de tracker rox.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      12 mai 2009 à 22:02:45

                                      Tu obtient un timestamp négatif. Tu soustrait une valeur négative, ça revient à l'additionner. Tu as ton temps de vie. Le problème vient surtout si ton type est du 29 février. Enfin, ça peut se contourner, c'est juste 1 date ça va. Les années bissextiles sont divisibles par 4 ou 400 (exception à la règle suivante) mais pas par 100, sinon ça n'en est pas une. Le plus simple reste date("L").
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Don't be serious but do it seriously.
                                        13 mai 2009 à 11:43:03

                                        merci pour vous tous.
                                        mais Clicky ton code ça marche pas! :(
                                        je veux une simple fonction qui me calcul l'age a partir de la date de naissance qu'on va récupérer de la base de donnée.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          13 mai 2009 à 11:52:03

                                          perso j'utilise ça :
                                          <?php
                                          function Age($date_naissance)
                                          	{
                                          	$am = explode('/', $date_naissance);
                                          	$an = explode('/', date('d/m/Y'));
                                          
                                          	if(($am[1] < $an[1]) || (($am[1] == $an[1]) && ($am[0] <= $an[0])))
                                          	return $an[2] - $am[2];
                                          
                                          	return $an[2] - $am[2] - 1;
                                          	}
                                          


                                          ensuite tu applique ta fonction à ta variable extraite de la bdd :
                                          $age = Age($donnees['age']);
                                          

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            13 mai 2009 à 11:56:26

                                            il me parrait un erreur dans la ligne 4:
                                            Catchable fatal error: Object of class Note could not be converted to string
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              13 mai 2009 à 11:58:00

                                              euh tu parles de mon code ou du tiens?
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                13 mai 2009 à 12:00:53

                                                de ton code. j'ai l'erreur dans la ligne 4 de ton code
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  13 mai 2009 à 12:03:46

                                                  Et où tu vois une classe dans son code ?!
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
                                                    13 mai 2009 à 12:05:22

                                                    j'ai utilisé son code dans ma classe.
                                                    j'envoie tous le code de la classe?
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      13 mai 2009 à 12:05:26

                                                      Bizarre moi ça marche... en plus il n'y a pas de classe dans mon code...(merci nightmat!)
                                                      essaye ça pour voir si ça te rapporte une erreur
                                                      <?php
                                                      function Age($date_naissance)
                                                      	{
                                                      	$am = explode('/', $date_naissance);
                                                      	$an = explode('/', date('d/m/Y'));
                                                      
                                                      	if(($am[1] < $an[1]) || (($am[1] == $an[1]) && ($am[0] <= $an[0])))
                                                      	return $an[2] - $am[2];
                                                      
                                                      	return $an[2] - $am[2] - 1;
                                                      	}
                                                      $datenaiss = '18/03/1945';
                                                      
                                                      	
                                                      
                                                      $age = Age($datenaiss);
                                                      echo $age;
                                                      

                                                      monter nous ton code pour qu'on voit comment tu l'as intégré!
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        13 mai 2009 à 12:07:22

                                                        j'utilise php orienté objet. donc il faut que j'ai crée un objet pour appeler la fonction
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          13 mai 2009 à 12:09:14

                                                          Citation : n.mouna

                                                          merci pour vous tous.
                                                          mais Clicky ton code ça marche pas! :(
                                                          je veux une simple fonction qui me calcul l'age a partir de la date de naissance qu'on va récupérer de la base de donnée.


                                                          Chez moi ça marche en tout cas, je récupère la date de naissance de ma base de données aussi.
                                                          Il y a juste à remplacer les données $_POST[] de mon code par celles obtenues de la bdd.

                                                          Par contre, dans ma table, j'ai une colonne par élément : une pour le jour de naissance, une autre pour le mois et une troisième pour l'année.

                                                          Il y a peut-être moyen de récupérer chacun de ces éléments séparément, à partir d'une seule donnée (avec un explode() je suppose), puis de mettre chaque élément dans leur variable respectives, et de s'en servir de la même façon que les $_POST[] ou $donnée_bdd[].

                                                          Ce n'est pas une simple petite fonction certes, mais je t'assure que ce code fonctionne, j'ai fait plein de tests concluants, en changeant la date de mon ordi plusieurs fois, en mettant une année bissextile, non bissextile, en mettant un jour avant et après le jour anniversaire, le mois de ce jour, le mois avant et celui d'après, etc. Il prend en compte les gens nés un 29 février d'une année bissextile pour lui afficher son nouvel âge le 28 Février si l'année courante ne l'est pas (pas de 29 Février).

                                                          'Fin bon, c'est toi qui vois hein ^^ .
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          Auto-entrepreneur infographiste (créations graphiques, mises en page). Mon site Internet. Demandeuse d'emploi.

                                                            13 mai 2009 à 12:10:49

                                                            clicky regarde le code que j'ai mis et tu auras ta réponse en cas de date complète non éclatée au départ! ^^
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              13 mai 2009 à 12:13:21

                                                              Citation : eiki42

                                                              clicky regarde le code que j'ai mis et tu auras ta réponse en cas de date complète non éclatée au départ! ^^


                                                              Oui j'ai vu entre-temps, merci pour la méthode ;) .
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Auto-entrepreneur infographiste (créations graphiques, mises en page). Mon site Internet. Demandeuse d'emploi.

                                                              calculer l'age a partir de la date de naissance

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown