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

PHP & Base de données Discussion :

Calculer l'âge en fonction de la date de naissance [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut Calculer l'âge en fonction de la date de naissance
    Bonjour tout le monde,

    Je suis entrain de réaliser un site web en PHP orienté objet donc j'ai une classe "Client" dans laquel se situe un attribut "DateDeNaissance" de type date(YYYY/MM/JJ).

    J'aimerais calculer l'age grâce à la date de naissance, comment puis-je faire??

    Je sais faire lorsque la date de naissance est divisé en 3 point : Jour, Mois, Années. Mais avec la date de naissance je vois pas comment faire pour prendre juste le mois ou juste l'année??

    Merci d'avance!!

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Bonjour,

    Ta date en 3 c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date= "JJ/MM/YYYY"
    list($jour, $mois, $annee) = explode ('/', $date);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Par défaut
    Pour compléter la réponse, voici une solution qui permet de calculer rapidement l'âge, mais attention il faut passer la date au format US.
    Ya sûrement d'autres méthodes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $date= "4/12/1908"
    list($jour, $mois, $annee) = explode ('/', $date);
    $TSN = strtotime($annee"/".$mois."/".$jour);
    $TS = strtotime(date("Y/m/d"));
     
    $Age = ($TS-$TSN)/(365*3600*24);
    echo "Age= ".round($Age);

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut réponse à riete
    Merci pour ton code, voila ce que ça me donne comme code dans mon programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Ce code se situe dans la classe "DAO_Client"
    public function age($date)
    	{
    		list($jour, $mois, $annee) = explode ('/', $date);
    		$TSN = strtotime($annee."/".$mois."/".$jour);
    		$TS = strtotime(date("Y/m/d"));
    		 
    		$Age = ($TS-$TSN)/(365*3600*24);
    		echo round($Age);			
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Controles C_Client
    <?php
    	// Instance de la classe 'Client'
    	$DAOClt = new client_DAO();
    	// Chargement des clients
    	$MesClt = $DAOClt->retournerLesclients();
    	
    	// Afficher la page "client"
    	require('Admin/Vue/V_client.php');
    
    ?>
    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
    // Vue V_Client
    <table>
    	<tr>
    		<th>Numéro du client</th>
    		<th>Titre</th>
    		<th>Nom</th>
    		<th>Prenom</th>
    		<th>Date de naissance</th>
    		<th>Age</th>
    		<th>Adresse</th>
    		<th>Code postal</th>
    		<th>Ville</th>
    	</tr>
    	<?php
    	foreach ($MesClt as $clients)
    	{
    		?>
    		<!-- Affichage des données -->
    		<tr>
    			<td><div class="contenu"><?php echo $clients->get_IdClient(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_titre(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_nom(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_prenom(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_DateNaissance()?></div></td>
    			<td><div class="contenu"><?php echo $clients->age("10/10/1986")?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_adresse(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_code_postal(); ?></div></td>
    			<td><div class="contenu"><?php echo $clients->get_ville(); ?></div></td>
    		</tr>
    		<?php
    	}
    	?>
    </table>
    Mon problème c'est qu'il m'affiche automatiquement 22ans. Même si la date de naissance dans la base = 0000-00-00.

    Comment faire pour résoudre ce problème??

    Merci d'avance!!

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Par défaut
    <td><div class="contenu"><?php echo $clients->age("10/10/1986")?></div></td>
    ça semble normal qu'il affiche 22 ans

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut réponse à Guardian
    ah oui effectivement!!

    Mais que dois-je mettre à la place de "10/10/1986"??

    Puis c'est ma date de naissance et j'ai 21ans et non 22ans!!

    Cordialement!!

  7. #7
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    Tu as un exemple dans la doc

    http://www.php.net/manual/fr/function.date.php#68111

    qui te permets de calculer le nombre de jours entre 2 dates , si tu le divise par 365.25 tu arrive sur un nombre d'années a virgule que tu peux arrondir , et/ou que tu peux comparer au jour précis de naissance pour afficher l'entier exact.
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  8. #8
    Membre Expert Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Par défaut
    Citation Envoyé par loic20h28 Voir le message
    ah oui effectivement!!

    Mais que dois-je mettre à la place de "10/10/1986"??

    Puis c'est ma date de naissance et j'ai 21ans et non 22ans!!

    Cordialement!!
    Ok tu as 21 ans, en suivant les instructions de de RideKick pour avoir l'age juste.

    Mais en ce qui concerne ta question de savoir pourquoi tu n'a pas l'age de la personne que tu interroges, c'est simplement parce que tu ne passe pas sa valeur à ta fonction age().
    Il faut que tu fasse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $clients->age($clients->get_DateNaissance())

  9. #9
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par loic20h28 Voir le message
    j'ai une classe "Client" dans laquel se situe un attribut "DateDeNaissance" de type date(JJ/MM/YYYY).

    J'aimerais calculer l'age grâce à la date de naissance, comment puis-je faire??
    Tu remplaces MaDate par DateDeNaissance tout simplement.

    CURRENT_DATE est une fonction MySQL qui te donne la date d'aujourd'hui.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut réponse à CinePhil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     $req=("(((EXTRACT(YEAR FROM CURRENT_DATE)) * 365.2422+ (EXTRACT(MONTH FROM CURRENT_DATE) - 1) * 31.0+ EXTRACT(DAY FROM CURRENT_DATE))-((EXTRACT(YEAR FROM DATEDENAISSANCE)) * 365.2422+ (EXTRACT(MONTH FROM DATEDENAISSANCE) -1 ) * 31.0+ (EXTRACT(DAY FROM DATEDENAISSANCE))) / 365.2422");
    		$res = mysql_query($req);
    		$Age=mysql_fetch_row($res);
    J'ai essayé mais voici ce que cela m'affiche comme erreur :
    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\wamp\www\Site_Web\DAO\client_DAO.php on line 155
    0 ans
    la ligne 155 correspond : $Age=mysql_fetch_row($res);

    Je me demande si je dois pas faire une boucle tel que "foreach" mais si c'est le cas je vois pas sur quel élément??

    Cordialement!!

  11. #11
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Euh... ce que je t'ai donné, c'est une formule à utiliser DANS une requête !
    Il manque un SELECT !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT Client,
    
    (((EXTRACT(YEAR FROM CURRENT_DATE)) * 365.2422
    + (EXTRACT(MONTH FROM CURRENT_DATE) - 1) * 31.0
    + EXTRACT(DAY FROM CURRENT_DATE))
    -
    ((EXTRACT(YEAR FROM DateDeNaissance)) * 365.2422
    + (EXTRACT(MONTH FROM DateDeNaissance
    ) -1 ) * 31.0
    + (EXTRACT(DAY FROM DateDeNaissance
    ))
    ) / 365.2422 AS Age
    FROM TaTable
    
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut réponse à CinePhil
    Effectivement j'avais oublié le "SELECT".
    Mais cela revient au même c'est à dire que j'ai le même message d'erreur.

    Cordialement!!

  13. #13
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Donne ton code qu'on regarde ça.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. [WD10] Calcul de l'âge à partir de la date de naissance
    Par miezaka dans le forum WinDev
    Réponses: 2
    Dernier message: 06/03/2014, 16h34
  2. Requête tranche d'âge en fonction de la date de naissance
    Par Devilju69 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/01/2014, 13h16
  3. Réponses: 4
    Dernier message: 14/11/2007, 11h07
  4. Fonction de calcul du nb de jour entre 2 dates
    Par Teugos dans le forum SAP
    Réponses: 3
    Dernier message: 20/09/2007, 18h12

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