DepanneTonPC, dépannage et aide informatique

Bienvenue : Connexion | Inscription
La date/heure actuelle est 25 Nov 2024 à 9:03 FAQ | Rechercher | Membres | Groupes

[PHP] calculer l'âge à partir de la date de naissance ?


 
 
Ce que nous vous conseillons :
  1. Lisez les réponses ci-dessous où vous trouverez des conseils et de l'aide de la part des autres utilisateurs
  2. Avant de faire des modifications sur votre système ou d'installer des logiciels, nous vous recommandons fortement de cliquer ici pour scanner Windows afin de détecter les erreurs de registre.
Poster un nouveau sujet   Répondre au sujet    DepanneTonPC Index du Forum -> Réseaux et Télécommunications
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
SaVouSéPaTe



Inscrit le: 11 Oct 2005
Messages: 22
Localisation: Bar le Duc en Meuse

MessagePosté le: 18 Oct 2005 à 11:23    Sujet du message: [PHP] calculer l'âge à partir de la date de naissance ? Répondre en citant

bonjour à tous

je ne sais pas trop si quelqu'un pourra m'aider mais je tente le coup quand même

voilà, je suis en train de réaliser un site en PHP, et dans l'une des pages
je dois calculer l'âge d'une personne en fonction de sa date de naissance

j'ai essayé différentes techniques trouvées sur Internet (en fait, se sont + ou moins les mêmes dans le fond)

il s'agit en fait de transcrire la date de naissance en secondes écoulées depuis le 1er Janvier 1970
puis de soustraire ce nombre du nombre de secondes écoulées pour le moment présent (je ne sais pas si c'est très clair Confused )

toutes les solutions proposées sur Internet en vienne à faire cette manipulation

je l'ai testé, mais apparement je dois être la seule car cette fonction ne marche pas
je ne tombe jamais sur le bon âge... :snif:
pour certaines personnes, j'obtient 1an de trop; pour d'autre 2ans de moins, mais ça n'est jamais exact

je me suis demandé s'il n'y avais pas un rapport avec les années bissextiles, auquel cas je ne sais pas comment gérer celà

est-ce que quelqu'un à déjà eut ce genre de problèmes ?
_________________
.: SaVouSéPaTe :.

Je n'ai pas peur des ordinateurs
ni des virus exterminateurs... 
 
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur MSN Messenger
vin-moi
Administrateur


Inscrit le: 28 Aoû 2004
Messages: 6897
Localisation: France

MessagePosté le: 18 Oct 2005 à 13:02    Sujet du message: Répondre en citant

salut, quel est le format de la date de naissance de la personne en question ? par exemple "01 janvier 1999" ou "01/01/1999" ou autre ? ca risque en effet d'être assez complexe avec les années bisexstiles, etc ...
_________________
Smile
 
 
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
SaVouSéPaTe



Inscrit le: 11 Oct 2005
Messages: 22
Localisation: Bar le Duc en Meuse

MessagePosté le: 18 Oct 2005 à 13:07    Sujet du message: Répondre en citant

j'utilise le format JJ/MM/AAAA
_________________
.: SaVouSéPaTe :.

Je n'ai pas peur des ordinateurs
ni des virus exterminateurs... 
 
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur MSN Messenger
vin-moi
Administrateur


Inscrit le: 28 Aoû 2004
Messages: 6897
Localisation: France

MessagePosté le: 18 Oct 2005 à 19:54    Sujet du message: Répondre en citant

J'ai tenté quelques chose mais ca fonctionne qu'avec les age supérieur à 1970 :

Citation:
<?
$mois = 5;
$jour = 5;
$annee = 90;

$date1 = MkTime(00, 00, 00, $mois, $jour, $annee);

$date_actuelle = time();

$age = $date_actuelle - $date1 ;

echo $age;
echo "<br>";
$test = $age / 60 / 60 / 24 / 365;
echo $test;
?>


donc en gros le mktime donne la durée au forma UNIX. donc en année ca doit donnée 20 ans et quelques.

après le récupere la date actuelle au format Unix : 35 ans environ.

je fait donc la date actuelle moins l'année de naissance et ca donne une durée en seconde que j'ai vérifie dans la variable $test (divisé par 60² par 24 et 365 pour avoir les secondes en années) et on retombe bien à 15 ans et des brouettes. Donc évidemment ca déconne avec les années inférieures à 1970, il faut que je creuse plus le problème !
_________________
Smile
 
 
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
gebruik



Inscrit le: 12 Aoû 2005
Messages: 56
Localisation: Rouen (enfin, pas loin)

MessagePosté le: 19 Oct 2005 à 11:14    Sujet du message: Répondre en citant

Pourquoi tu utilises le temps Unix pour calculer un âge ? C'est inutile !
Tu as deux contraintes : 1904, année ou il y a eu un rattrapage du calendrier par rapport à la révolution terrestre et le passage au calendrier grégorien.
Le temps Unix sert uniquement à synchroniser plusieurs machines.
_________________
Pour trouver sans chercher, il faut longtemps avoir cherché sans trouver. 
 
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
SaVouSéPaTe



Inscrit le: 11 Oct 2005
Messages: 22
Localisation: Bar le Duc en Meuse

MessagePosté le: 19 Oct 2005 à 11:16    Sujet du message: Répondre en citant

merci beaucoup pour ta réponse Wink

j'ai copié ton code (qui est, à peu de chose près le même que le mien) et je l'ai testé
et là, j'ai vu que ça marchait très bien !
j'ai cru devenir folle mais non...

je suis en fait très nulle ! j'avais simplement inverser le mois et le jour dans la fonction mktime()
(hou la honte ! Surprised )

et dire que ça fait presqu'un mois que je planche là dessu ! Bad Grin

merci beaucoup pour votre aide Cool

pour mon cas, je n'aurais jamais de dates de naissance inférieure à 1970 donc ça va
mais il est vrai qu'il serait interessant de creer une méthode qui fonctionne avec des dates inférieure à 1970...

je vais méditer ! Laughing

edit : que proposes-tu comme solution "gebruik" ?
_________________
.: SaVouSéPaTe :.

Je n'ai pas peur des ordinateurs
ni des virus exterminateurs... 
 
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur MSN Messenger
vin-moi
Administrateur


Inscrit le: 28 Aoû 2004
Messages: 6897
Localisation: France

MessagePosté le: 19 Oct 2005 à 12:40    Sujet du message: Répondre en citant

ah oui j'y avais pas pensé Smile. Mais bon, je vois pas trop comment faire autrement en faite Razz
_________________
Smile
 
 
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
SaVouSéPaTe



Inscrit le: 11 Oct 2005
Messages: 22
Localisation: Bar le Duc en Meuse

MessagePosté le: 20 Oct 2005 à 17:09    Sujet du message: Répondre en citant

j'ai un peu réfléchis et finallement ce n'était si difficile que ça !

voilà une autre technique bien plus simple :
Code:

<?php

// on décortique la date d'aujourd'hui (jour,mois et année):
$an_now=date("Y");
$mois_now=date("m");
$jour_now=date("d");

$date_naiss="31/10/1960";

//on décortique la date de naissance (jour,mois et année):
$an=substr($date_naiss,6,4);
$mois=substr($date_naiss,3,2);
$jour=substr($date_naiss,0,2);

//on soustrait l'année de naissance de l'année actuelle :
$age=$an_now-$an;

//si le jour de naissance n'est pas encore passé, on retire une année :
if( ($mois>$mois_now) or (($mois==$mois_now) and ($jour>$jour_now)) )
{
   $age=$age-1;
}

echo $age;

?>

_________________
.: SaVouSéPaTe :.

Je n'ai pas peur des ordinateurs
ni des virus exterminateurs... 
 
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur MSN Messenger
gebruik



Inscrit le: 12 Aoû 2005
Messages: 56
Localisation: Rouen (enfin, pas loin)

MessagePosté le: 21 Oct 2005 à 22:30    Sujet du message: Répondre en citant

La fonction date() te permet ce genre de calcul depuis 1901, à condition que ton serveur ne tourne pas sous Windows qui, paradoxalement, ne sait pas gérer avant 1970.
Si tu es un adepte de la programmation objet, tu peux aussi te créer une classe qui va calculer le nombre de jour entre la date d'aujourd'hui et la date entrée en tenant compte des années bisextiles. Tu testes d'abord les jours : si le jour d'aujourd'hui moins le jour de la naissance est négatif, tu soustrais un moins dans ton décompte de mois auquel tu appliques le même procédé, puis à l'année en tenant compte du fait que les années multiples de 4 sont bissextiles.
_________________
Pour trouver sans chercher, il faut longtemps avoir cherché sans trouver. 
 
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
vin-moi
Administrateur


Inscrit le: 28 Aoû 2004
Messages: 6897
Localisation: France

MessagePosté le: 22 Oct 2005 à 10:27    Sujet du message: Répondre en citant

Sympas, merci pour ces précisions Gebuik Very Happy
_________________
Smile
 
 
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
gebruik



Inscrit le: 12 Aoû 2005
Messages: 56
Localisation: Rouen (enfin, pas loin)

MessagePosté le: 24 Oct 2005 à 19:16    Sujet du message: Répondre en citant

Au moins la méthode permet-elle de s'affranchir de la fonction date(). Par contre, il faut tenir compte des exceptions niveau des années bissextiles (les multiples de 400 n'en sont pas par exemple).
_________________
Pour trouver sans chercher, il faut longtemps avoir cherché sans trouver. 
 
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
SaVouSéPaTe



Inscrit le: 11 Oct 2005
Messages: 22
Localisation: Bar le Duc en Meuse

MessagePosté le: 25 Oct 2005 à 11:04    Sujet du message: Répondre en citant

la méthode avec des classes me parait un peu compliquée pour une simple page PHP

il me faut juste l'âge de la personne, or dans ce cas, les années bissextiles ou pas ne changent rien
si j'avais voulu le nombre de jours, effectivement j'aurai essayé ta méthode... (il faudra que je le teste à l'occasion quand même)

merci pour votre aide Wink
_________________
.: SaVouSéPaTe :.

Je n'ai pas peur des ordinateurs
ni des virus exterminateurs... 
 
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur MSN Messenger
gebruik



Inscrit le: 12 Aoû 2005
Messages: 56
Localisation: Rouen (enfin, pas loin)

MessagePosté le: 25 Oct 2005 à 19:28    Sujet du message: Répondre en citant

Il est plus facile de manipuler des entiers que des dates...
_________________
Pour trouver sans chercher, il faut longtemps avoir cherché sans trouver. 
 
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
Ajouter à : Scoopeo del.icio.us Digg this Technorati fuzz
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    DepanneTonPC Index du Forum -> Réseaux et Télécommunications Toutes les heures sont au format GMT + 2 Heures
 
Page 1 sur 1 

 
Sauter vers:  

Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum