Aller au contenu

afficher date naissance en age


Topaze

Sujets conseillés

salut,

J'ai dans ma table un champ date qui contient la date de naissance envoyée par la validation d'un formulaire sous cette forme aaaa/mm/jj. j'aimerai calculer l'age de la personne et l'afficher comment faire.

Merci de votre aide

Lien vers le commentaire
Partager sur d’autres sites

Salut,

après une recherche rapide je crois que ce code devrait marcher:

SELECT YEAR(DATEDIFF(date_de_naissance,CURDATE())) FROM ta_table

Modifié par Boo2M0rs0
Lien vers le commentaire
Partager sur d’autres sites

SELECT pseudo,YEAR(DATEDIFF(date_de_naissance,CURDATE())) FROM ta_table

.

.

.

echo '<td>' . $data['date_de_naissance']. '</td>';

j'ai ce message d'erreur :

Undefined index: date_de_naissance

Lien vers le commentaire
Partager sur d’autres sites

Topaze,

Ce champ est bien sûr à remplacer par le nom du champ dans ta base de données...

Boo2M0rs0 aurait tout aussi bien pu mettre age_du_capitaine pour l'exemple, non ? :lol:

Dan

Lien vers le commentaire
Partager sur d’autres sites

Salut !

  SELECT pseudo,YEAR(DATEDIFF(date_de_naissance,CURDATE())) AS age FROM ta_table

et

echo '<td>' . $data['age']. '</td>';

Ca devrait mieux marcher ça ;)

Edit : bien sûr remplace le nom de la table, le nom du champs, le nom de tout...

Lien vers le commentaire
Partager sur d’autres sites

Topaze,

Qu'as-tu mis comme requête ? Donnes-nous le code ici, ainsi que le nom de la table et le nom du champ qui contient la date.

Parce que si tu suis les instructions à la lettre cela ne marchera pas.

Il faut mettre le nom du champ et celui de la table en lieu et place de

  • date_de_naissance
  • ta_table

Dan

Lien vers le commentaire
Partager sur d’autres sites

salut,

Voici la requete :

$sql = 'SELECT pseudo,sexe,YEAR(DATEDIFF(datenaissance,CURDATE())) AS age FROM inscrits ORDER BY num ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;

$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

if($req) {

echo '<table bgcolor="#FFFFFF">'."\n";

echo '<tr>';

echo '<td><b>PSEUDO</b></td>';

echo '<td><b>AGE</b></td>';

echo '<td><b>SEXE</b></td>';

echo '</tr>'."\n";

while ($data = mysql_fetch_array($req)) {

echo '<tr>';

echo '<td>' , stripslashes(htmlentities(trim($data['pseudo']))) , '</td>';

echo '<td>' . $data['age']. '</td>';

echo '<td>' , stripslashes(htmlentities(trim($data['sexe']))) , '</td>';

echo '</tr>'."\n";

}

// on libère l'espace mémoire alloué pour cette requête

mysql_free_result ($req);

echo '</table><br />';

Avec cette requete rien ne s'affiche dans la colonne Age

Lien vers le commentaire
Partager sur d’autres sites

Erf désolé,

J'ai posté rapidement sans rien vérifier :( , après test, Je comprend pas pourquoi cela ne marche pas :wacko:

J'ai donc testé essayé plusieurs codes en php et j'ai réussi à faire ça qui semble à peu près fonctionnel :s ...

//la date est au format aaaa/mm/jj
//$date est alors un tableau contenant l'année dans l'index 0, le mois dans l'index 1 et le jour dans l'index 2
$date = explode('/' , $data['datenaissance']);

$date =  mktime(0,0,0, $date[1], $date[2] , $date[0]);

if( $date == -1 or !$date)
$age = 'n/a';
else
$age = date( 'Y', time() - $date) - 1970;
//Pourquoi -1970 ?? parce que les timestamp unix sont calculé à partir du 1er janvier 1970

Je tiens à m'excuser à tout ceux qui ont participé à ce topic et qui ont perdu leur temps jusque là à cause de moi :(

Modifié par Boo2M0rs0
Lien vers le commentaire
Partager sur d’autres sites

Apres votre dernière correction j'ai ce message d'erreur :

Notice: Undefined offset: 1 in c:\easyphp1-8\www\web\affichage2.php

Notice: Undefined offset: 2 in c:\easyphp1-8\www\web\affichage2.php

Warning: mktime(): Windows does not support negative values for this function in c:\easyphp1-8\www\web\affichage2.php

pour cette ligne :

$date = mktime(0,0,0, $date[1], $date[2] , $date[0]);

Lien vers le commentaire
Partager sur d’autres sites

Moi j'ai une méthode archaïque qui a le mérite de marcher :

 $age = date("Y-m-d") - $danaiss;

avec la date de naissance sous la forme Y-m-d également...

Lien vers le commentaire
Partager sur d’autres sites

merci sarc ta méthode marche correctement. Mais j'aimerai que quelqu'un m'aide à corriger l'erreur.

J'ai un autre problème sur upload d'image pourriez-vous aller sur le message pour me dire quoi faire

Lien vers le commentaire
Partager sur d’autres sites

Les chiffres de ta date sont peut être séparés par des tirets (et pas des slashs) donc il faut remplacer le '\' (dans la commande explode) par un '-', si c'est pas ça, je jète l'éponge ...

La méthode de sarc a l'air cool, je ne savais pas que php savait faire ça :)

Modifié par Boo2M0rs0
Lien vers le commentaire
Partager sur d’autres sites

Moi non plus, je ne savais pas que PHP savait faire ca :clap:

Sinon, voila un code qui donne l'age sous forme d'Annee, mois, jour.

function extrdate($date){
/****
 <- $date = AAAAMMJJ
-> list($jour, $mois, $annee)
****/
$j = substr($date,6,2);
$m = substr($date,4,2);
$a = substr($date,0,4);

return array($j,$m,$a);
}

function age($date, $naissance){
/****
 <- $date, $naissance = AAAAMMJJ
-> age en list($jour, $mois, $annee)
****/
list($jn, $mn, $an) = extrdate($naissance);
list($jd, $md, $ad) = extrdate($date);

$a = $ad - $an;
if( $md.$jd < $mn.$jn )
 $a--;
 
$m = $md - $mn;
if( $jd < $jn)
 $m--;
if($m < 0)
 $m+= 12;

if(($j = $jd - $jn) < 0)
 $j+= date('t', mktime(0,0,0,$md-1,1,$ad));
return array($j,$m,$a);
}

Made in moi :smartass:

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...