IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Calculer un age depuis une date de naissance


Sujet :

Langage PHP

  1. #1
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 486
    Points : 2 440
    Points
    2 440
    Par défaut Calculer un age depuis une date de naissance
    Bonjour,

    je dois afficher la liste des joueurs dans un tableau, avec toute les caractéristiques. J'ai surmonter le problème d'extraction des dates en les passant à la norme FR .
    Cependant je bloque sur l'affichage et le calcul de la date de naissance.
    Mon code est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <?php
    include('includes/fonction_bdd.php');
    connect_bdd('ma_BDD');
    $requete = mysql_query("SELECT * FROM seniors ORDER BY nom") or die(mysql_error());
    //fonction pour afficher une date en FR depuis une date en US
    function dateFr($date)
    {
    return strftime('%d-%m-%Y',strtotime($date));
    }
    ?>
    .....
    <?php
    //Si les joueurs sont présent alors
    $requete = "SELECT * FROM joueurs ORDER BY id";
    $result = @mysql_query($requete) or die(mysql_error());
    if(@mysql_num_rows($result) > 0)
    {
    ?>  
    <center><h2 id="example">Les joueurs</h2></center>
    		<?php
    		$result = mysql_query('SELECT * FROM joueurs WHERE postejoueur ="attaquant"  ') or die(mysql_error());
    		if(@mysql_num_rows($result) > 0)
    		{
    		?>
    			<h2 >Attaquant</h2>
    			<div class="container">
    			<p style="color: #ccc;">
    			<ul class="column"> 
    			<?php
    			while($sql = mysql_fetch_array($result))
    			{								
    			?>	
    			<li> 
    			<div class="block">
    			<img style="width: 140px; height: 144px;" alt="" src="galerie/<?php echo $sql['lienimage'];?>">
    			<font color="black">
                           <p><?php echo $sql['prenom'].' '.$sql['nom'];?></p>
                           <p>Age: <?php $age=$sql['age']; echo dateFr($age);?></p>
                           <p>Nationalité:<?php echo $sql['nation'];?></p>
                           <p>Taille: <?php echo $sql['taille'];?> Cm</p>
                           <p>Poids: <?php echo $sql['poids'];?> Kg</p></font>
    	/div>
    	</li> 
    	<?php
    		}
                 }
    	?>
    ....
    <?php
    }
    ?>
    j'ai trouvé cette fonction pour calculer les dates de naissances:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    function Age($date_naissance)
         {
         $arr1 = explode('/', $date_naissance); // on sépare les chiffres de / grace à la fonction explode
         $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;
         }
     
     
         // exemple
         $ma_date_de_naissance = '26/05/1904';
         $mon_age = Age($ma_date_de_naissance);
         $auj=date('d/m/Y');
         echo $mon_age;
         ?>
    Ma question est, comment puis-je appliquer cette dernière fonction pour obtenir la date de naissance des joueurs ?


    Merci d'avance
    Les pièges de l'Internet
    Helix, réponse à une intrusion


    "La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
    "Si j'ai vu plus loin, c'est en me tenant sur les épaules de géants." Isaac Newton

  2. #2
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

    - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre

  3. #3
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 486
    Points : 2 440
    Points
    2 440
    Par défaut
    ok je regarde ça
    Les pièges de l'Internet
    Helix, réponse à une intrusion


    "La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
    "Si j'ai vu plus loin, c'est en me tenant sur les épaules de géants." Isaac Newton

  4. #4
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut
    Juste, je trouve son "usage" plutot bizarre...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    I'm Jay, I'm < ?= age('1974-01-31') ?> and live on the French Riviera.
    J'aurais plutot fait ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    I'm Jay, I'm <?php echo age('1974-01-31'); ?> and live on the French Riviera.
    Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

    - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre

  5. #5
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    @radicaldreamer

    est un alias bien pratique de
    Note additionnelle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <p>
    <?php if ($a): ?>
    <a href="$a">$a</a>
    <?php elseif($b): ?>
    <a href="$b">salade</a>
    <?php endif; ?>
    est aussi une syntaxe bien pratique pour ne pas perdre ses { et } dans l'indentation (X)HTML

  6. #6
    Membre actif Avatar de el_pedro
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 200
    Points : 236
    Points
    236
    Par défaut
    Je me suis permis de réécrire la fonction de calcul de l'age. Il te suffit juste d'intégrer la fonction dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php
    include('includes/fonction_bdd.php');
    connect_bdd('ma_BDD');
    $requete = mysql_query("SELECT * FROM seniors ORDER BY nom") or die(mysql_error());
    //fonction pour afficher une date en FR depuis une date en US
    function dateFr($date)
    {
    	return strftime('%d-%m-%Y',strtotime($date));
    }
    function Age($date){
    	$date = preg_split('/\//', $date);
    	return floor((strtotime("now") - strtotime($date[1].'/'.$date[0].'/'.$date[2]))/60/60/24/365.25);
    }
    ?>
    .....
    <?php
     
    //Si les joueurs sont présent alors
    $requete = "SELECT * FROM joueurs ORDER BY id";
    $result = @mysql_query($requete) or die(mysql_error());
    if(@mysql_num_rows($result) > 0)
    {
    ?>  
    <center><h2 id="example">Les joueurs</h2></center>
    		<?php
    		$result = mysql_query('SELECT * FROM joueurs WHERE postejoueur ="attaquant"  ') or die(mysql_error());
    		if(@mysql_num_rows($result) > 0)
    		{
    		?>
    			<h2 >Attaquant</h2>
    			<div class="container">
    			<p style="color: #ccc;">
    			<ul class="column"> 
    			<?php
    			while($sql = mysql_fetch_array($result))
    			{								
    			?>	
    			<li> 
    			<div class="block">
    			<img style="width: 140px; height: 144px;" alt="" src="galerie/<?php echo $sql['lienimage'];?>">
    			<font color="black">
                           <p><?php echo $sql['prenom'].' '.$sql['nom'];?></p>
                           <p>Age: <?php echo Age(dateFr($sql['age']));?></p>
                           <p>Nationalité:<?php echo $sql['nation'];?></p>
                           <p>Taille: <?php echo $sql['taille'];?> Cm</p>
                           <p>Poids: <?php echo $sql['poids'];?> Kg</p></font>
    	/div>
    	</li> 
    	<?php
    		}
                 }
    	?>
    ....
    <?php
    }
    ?>
    ça devrai fonctionner....

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    C'est tout à fait faisable sans php , uniquement avec ta requête sql :
    http://dev.mysql.com/doc/refman/5.0/...culations.html

    Idem pour la date de naissance en français, nul besoin de fonction spécifique en php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DATE_FORMAT('%d/%m/%Y',date_naissance) FROM matable
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 486
    Points : 2 440
    Points
    2 440
    Par défaut
    merci de vos réponses
    @el_pedro
    pour ta fonction j'ai un problème à cette ligne de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return floor((strtotime("now") - strtotime($date[1].'/'.$date[0].'/'.$date[2]))/60/60/24/365.25);
    et l'erreur est la suivante:
    Notice: Undefined offset: 1 in .....
    @grunk
    Pour le SQL....il faut que je modifie ma table et le fonctionnement de mon calendrier pour enregistrer les dates...bon je préfère utiliser la fonction de calcul pour le moment.
    Les pièges de l'Internet
    Helix, réponse à une intrusion


    "La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
    "Si j'ai vu plus loin, c'est en me tenant sur les épaules de géants." Isaac Newton

  9. #9
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 486
    Points : 2 440
    Points
    2 440
    Par défaut
    pou l'erreur si je mets @ devant floor
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return @floor((strtotime("now") - strtotime($date[1].'/'.$date[0].'/'.$date[2]))/60/60/24/365.25);
    cela m'affiche 40 ans alors que la date de naissance dans ma BDD est "1989-01-31" (US)
    Les pièges de l'Internet
    Helix, réponse à une intrusion


    "La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
    "Si j'ai vu plus loin, c'est en me tenant sur les épaules de géants." Isaac Newton

  10. #10
    Membre actif Avatar de el_pedro
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 200
    Points : 236
    Points
    236
    Par défaut
    Normal, j'ai prix un format MM/DD/YYYY....

    Si tu garde ton format 1989-01-31 donc YYYY-MM-DD voila la bonne fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function Age($date){
    	$date = preg_split('/-/', $date);
    	return floor((strtotime("now") - strtotime($date[1].'/'.$date[2].'/'.$date[0]))/60/60/24/365.25);
    }
    Bon, je n'ai pas testé cette modification... mais ça doit être bon.

  11. #11
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 486
    Points : 2 440
    Points
    2 440
    Par défaut
    euh... ça n'a rien changé....
    je continue à chercher de mon coté.
    Les pièges de l'Internet
    Helix, réponse à une intrusion


    "La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
    "Si j'ai vu plus loin, c'est en me tenant sur les épaules de géants." Isaac Newton

  12. #12
    Rédacteur
    Avatar de pi-2r
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2006
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 486
    Points : 2 440
    Points
    2 440
    Par défaut
    mon prof d'info vient de mon donner la solution ce matin.
    à la ligne ou il y a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <p>Age: <?php echo Age(dateFr($sql['age']));?></p>
    il suffit d'enlever dateFr et le tour est joué
    Les pièges de l'Internet
    Helix, réponse à une intrusion


    "La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
    "Si j'ai vu plus loin, c'est en me tenant sur les épaules de géants." Isaac Newton

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    pour ne pas avoir tout fair en mysql c'etait plus simple non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT TIMESTAMPDIFF(YEAR,'1989-01-31', NOW());
    //21

    ca lui fait pas peur ton prof d'info de voir des choses comme ca ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide pour un script qui calcule le temps passé depuis une date
    Par Mooneer dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 25/05/2008, 15h23
  2. Réponses: 5
    Dernier message: 30/11/2007, 17h13
  3. [XI]calcul de cumul depuis une date
    Par lamyae_84 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 04/05/2007, 23h20
  4. Requete a partir d'une date de naissance pour obtenir un age
    Par Fleur-Anne.Blain dans le forum Langage SQL
    Réponses: 11
    Dernier message: 10/08/2006, 12h40
  5. Extraire diretement un age depuis une date
    Par zzman dans le forum Requêtes
    Réponses: 1
    Dernier message: 26/07/2006, 20h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo