Votre question

Afficher l'âge avec l'année de naissance, selon les années bissextile

Tags :
  • nes
  • Programmation
Dernière réponse : dans Programmation
21 Janvier 2008 23:12:51

Bonsoir,

J'ai créé un petit code pour afficher l'âge d'une personne avec sa date de naissance (même si elle est née avant 1970).
Il affiche aussi le changement d'âge le jour anniversaire.
Je lui ai mis un système pour ceux qui sont nés un 29 février (pour le problème de l'année bissextile ou non). Le code tel qu'il est, marchant pour les dates de naissance n'étant pas concernées par ce problème, j'aimerais savoir si les if des parties "année bissextile" vous paraissent plausibles, Je ne peux pas les tester puisque le dernier jour de février n'est pas encore passé et que l'année actuelle est bissextile.

Voici mon code :


  1. <?php
  2. /*En supposant qu'un formulaire ait été rempli auparavant pour récupérer la date de naissance d'une personne, par champs séparés : jour, mois et année de naissance.*/
  3.  
  4. if (isset($_POST['membre_jour_naiss']) && isset($_POST['membre_mois_naiss']) && isset($_POST['membre_annee_naiss']))
  5. {
  6. //On définit le jour, mois et année actuels avec la fonction date() pour chacun d'eux.
  7. $jour = date('d');
  8. $mois = date('m');
  9. $annee = date('Y');
  10. $annee_bis = date('L');//Pour savoir si l'année actuelle est bissextile ou non. 1 si oui, 0 si non.
  11. $jour_bis = 29;
  12. $mois_bis = 02;
  13.  
  14. //On définit le jour, mois et année de naissance de la personne, obtenus à l'aide du formulaire.
  15. $membre_jour_naiss = intval(htmlentities($_POST['membre_jour_naiss']));
  16. $membre_mois_naiss = intval(htmlentities($_POST['membre_mois_naiss']));
  17. $membre_annee_naiss = intval(htmlentities($_POST['membre_annee_naiss']));
  18.  
  19. //On affiche un message d'infos non précisées si au moins un des champs ou tous sont vides.
  20. if (empty($_POST['membre_jour_naiss']) || empty($_POST['membre_mois_naiss']) || empty($_POST['membre_annee_naiss']))
  21. {
  22. echo 'Âge : Infos non précisées.';
  23. }
  24. //On affiche l'âge du membre à l'aide de la condition if.
  25. elseif (($membre_annee_naiss < $annee) && ($jour >= $membre_jour_naiss) && ($mois >= $membre_mois_naiss))
  26. {
  27. //Si l'année est bissextile, pour ceux qui sont nés un 29 février.
  28. if (($annee_bis == 1) && ($jour_bis == $membre_jour_naiss) && ($mois_bis == $membre_mois_naiss))
  29. {
  30. $age1 = $annee - $membre_annee_naiss;
  31. echo 'Âge : '.$age1.' ans.';
  32. }
  33. //Si l'année n'est pas bissextile, pour ceux qui sont nés un 29 février.
  34. elseif (($annee_bis == 0) && ($jour_bis == $membre_jour_naiss) && ($jour == (--$jour)) && ($mois_bis == $membre_mois_naiss))
  35. {
  36. $age1 = $annee - $membre_annee_naiss;
  37. echo 'Âge : '.$age1.' ans.';
  38. }
  39. //On a le cas ici, où l'anniversaire est passé.
  40. $age1 = $annee - $membre_annee_naiss;
  41. echo 'Âge : '.$age1.' ans.';
  42. }
  43. else
  44. {
  45. //Si l'année est bissextile, pour ceux qui sont nés un 29 février.
  46. if (($annee_bis == 1) && ($jour_bis == $membre_jour_naiss) && ($mois_bis == $membre_mois_naiss))
  47. {
  48. //Ici, l'anniversaire n'est pas encore passé, l'incrémentation avant la variable $membre_annee_naiss est nécessaire.
  49. $age2 = $annee - (++$membre_annee_naiss);
  50. echo 'Âge : '.$age2.' ans.';
  51. }
  52. //Si l'année n'est pas bissextile, pour ceux qui sont nés un 29 février.
  53. elseif (($annee_bis == 0) && ($jour_bis == $membre_jour_naiss) && ($jour == (--$jour)) && ($mois_bis == $membre_mois_naiss))
  54. {
  55. $age2 = $annee - (++$membre_annee_naiss);
  56. echo 'Âge : '.$age2.' ans.';
  57. }
  58. $age2 = $annee - (++$membre_annee_naiss);
  59. echo 'Âge : '.$age2.' ans.';
  60. }
  61. }
  62. ?>



Merci d'avance ;) 

Autres pages sur : afficher age annee naissance annees bissextile

22 Janvier 2008 00:34:19

Je ne comprend pas pourquoi tu utilises cela :

($jour == (--$jour))
22 Janvier 2008 10:32:38

C'est pour préciser au script qu'il doit afficher l'âge d'une personne née un 29 février, mais le 28 dans les cas où l'année ne serait pas bissextile (c'est-à-dire, qui n'aurait que 28 jours).
Ce petit bout de code dit en fait : si le numéro du jour actuel est égale à lui-même moins 1 c'est-à-dire 29 - 1 (qui est donc égal à 28), on affiche l'âge de la personne puisque le script ne pourra pas l'afficher le lendemain (le 29) puisque le 29 n'existera pas ces années là. Février n'a 29 jours que tous les quatre ans.

merci :) 
22 Janvier 2008 11:02:32

OK ;) 
22 Janvier 2008 11:15:58

Ben oui ok, mais ça ne me dit pas si mes conditions secondaires ont une chance de marcher ^^

Merci :) 
22 Janvier 2008 11:32:41

Normalement il n'y a pas de problème ... enfin je n'en ai pas vu !

Sinon je pensais à un truc ... Je ne sais pas si tu utilise en serveur local pour tes test mais si c'est le cas ne peux tu pas changer la date de ton pc pour faire les tests ? C'est une simple idée je ne sais pas si cela marche mais bon ... à voir !
22 Janvier 2008 11:40:41

Pas de problèmes particuliers donc, ok ça marche, merci ;) 

Je fais effectivement mes tests en local, et on m'a aussi conseillé de changer la date de l'ordi mais j'ai peur de ne pas savoir faire et encore plus de ne pas savoir remettre la bonne date après, mais c'est à voir en effet ;) 

Merci beaucoup ! :) 
22 Janvier 2008 11:45:31

Pour changer la date de ton pc c'es vraiment très simple lol.... tu double clic sur l'heure en bas à droite ...

ensuite tu choisis ton mois et ton jour dans le calendrier ... pour revenir a la date de base tu fais l'inverse en selectionnant la vrai date. Tu en as pour 15 seconds et il n'y a pas de risque ;) 
22 Janvier 2008 11:47:49

Oui en effet, je viens d'essayer, c'est vraiment tout simple lol.

Merci pour tes réponses rapides en tout cas ;) 
22 Janvier 2008 11:49:13

De rien !
22 Janvier 2008 12:30:59

Bon en fait je viens d'essayer en mettant la date de l'ordi un 28/02/2007 et mon code ne marche pas dans le cas où je précise ma date de naissance un 29/02, et en plus, les echos des conditions prinpales s'affichent avec ceux des secondaires.
Je vais réfléchir à un autre procédé :) 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS