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
|
Posté le: 18 Oct 2005 à 11:23 Sujet du message: [PHP] calculer l'âge à partir de la date de naissance ? |
|
|
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 )
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 |
|
|
vin-moi Administrateur
Inscrit le: 28 Aoû 2004 Messages: 6897 Localisation: France
|
Posté le: 18 Oct 2005 à 13:02 Sujet du message: |
|
|
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 ... _________________ |
|
Revenir en haut de page |
|
|
SaVouSéPaTe
Inscrit le: 11 Oct 2005 Messages: 22 Localisation: Bar le Duc en Meuse
|
Posté le: 18 Oct 2005 à 13:07 Sujet du message: |
|
|
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 |
|
|
vin-moi Administrateur
Inscrit le: 28 Aoû 2004 Messages: 6897 Localisation: France
|
Posté le: 18 Oct 2005 à 19:54 Sujet du message: |
|
|
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 ! _________________ |
|
Revenir en haut de page |
|
|
gebruik
Inscrit le: 12 Aoû 2005 Messages: 56 Localisation: Rouen (enfin, pas loin)
|
Posté le: 19 Oct 2005 à 11:14 Sujet du message: |
|
|
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 |
|
|
SaVouSéPaTe
Inscrit le: 11 Oct 2005 Messages: 22 Localisation: Bar le Duc en Meuse
|
Posté le: 19 Oct 2005 à 11:16 Sujet du message: |
|
|
merci beaucoup pour ta réponse
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 ! )
et dire que ça fait presqu'un mois que je planche là dessu !
merci beaucoup pour votre aide
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 !
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 |
|
|
vin-moi Administrateur
Inscrit le: 28 Aoû 2004 Messages: 6897 Localisation: France
|
Posté le: 19 Oct 2005 à 12:40 Sujet du message: |
|
|
ah oui j'y avais pas pensé . Mais bon, je vois pas trop comment faire autrement en faite _________________ |
|
Revenir en haut de page |
|
|
SaVouSéPaTe
Inscrit le: 11 Oct 2005 Messages: 22 Localisation: Bar le Duc en Meuse
|
Posté le: 20 Oct 2005 à 17:09 Sujet du message: |
|
|
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 |
|
|
gebruik
Inscrit le: 12 Aoû 2005 Messages: 56 Localisation: Rouen (enfin, pas loin)
|
Posté le: 21 Oct 2005 à 22:30 Sujet du message: |
|
|
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 |
|
|
vin-moi Administrateur
Inscrit le: 28 Aoû 2004 Messages: 6897 Localisation: France
|
Posté le: 22 Oct 2005 à 10:27 Sujet du message: |
|
|
Sympas, merci pour ces précisions Gebuik _________________ |
|
Revenir en haut de page |
|
|
gebruik
Inscrit le: 12 Aoû 2005 Messages: 56 Localisation: Rouen (enfin, pas loin)
|
Posté le: 24 Oct 2005 à 19:16 Sujet du message: |
|
|
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 |
|
|
SaVouSéPaTe
Inscrit le: 11 Oct 2005 Messages: 22 Localisation: Bar le Duc en Meuse
|
Posté le: 25 Oct 2005 à 11:04 Sujet du message: |
|
|
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 _________________ .: SaVouSéPaTe :.
Je n'ai pas peur des ordinateurs
ni des virus exterminateurs... |
|
Revenir en haut de page |
|
|
gebruik
Inscrit le: 12 Aoû 2005 Messages: 56 Localisation: Rouen (enfin, pas loin)
|
Posté le: 25 Oct 2005 à 19:28 Sujet du message: |
|
|
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 |
|
|
Ajouter à :
|
|