PRATIQUE PHP 
Calculer un âge en PHP
 
Une méthode pour calculer rapidement l'âge d'une personne avec un minimum d'appels de fonctions PHP. (15/09/2005)
  Forum

Réagissez dans les forums de JDN Développeurs

Calculer un âge requiert toujours de nombreux paramètres : pour peu que l'on veuille se montrer précis, il faudra prendre en compte les années bissextiles, voire convertir séparément années, mois, jours, heures et secondes.

Point de ces fioritures ici, il s'agit avant tout d'afficher le nombre de secondes écoulées entre deux dates, et de la convertir en nombre d'années, le tout en un minimum d'appels de fonctions PHP

Nous utilisons évidemment la fonction mktime(), qui permet de calculer le nombre de secondes écoulées entre un moment donné et la date d'origine, à savoir le 1er janvier 1970 à minuit. Notre méthode consiste donc à soustraire le nombre de secondes écoulées entre 1970 et la fameuse naissance, et ce même nombre entre 1970 et aujourd'hui. Cela interdit donc tout calcul pour des dates antérieures à 1970...

Cette soustraction faite, nous obtenons un nombre de secondes. Celui ne correspond pas, dans l'acception PHP, aux secondes écoulées entre nos deux dates, mais celles écoulées entre 1970 et une date encore inconnue.
On retrouvera cette date via la fonction date(). Celle-ci exprime la date sous la forme 19xx (1998 par exemple). Reste à lui soustraire la date d'origine, 1970, et l'on se retrouve avec le nombre d'années écoulées entre la date d'origine et notre date inconnue, qui correspond au nombre écoulé entre aujourd'hui et la date de naissance.

Notez que PHP comprend le nombre de secondes découvert comme correspondant à la date inconnue. Il est donc impensable d'en tirer un nombre de mois : trop de variations entrent en jeu. Cette méthode ne tire que les années, mais le fait en un minimum d'appels de fonctions...

<?php
$naiss = mktime(0, 0, 0, 07, 27, 1992);
$today = mktime();
$secondes = ($today > $naiss)? $today - $naiss : $naiss - $today;

$annees = date('Y', $secondes) - 1970;

echo "Je suis né il y a $annees an" . ($annees>1?'s':null) . '.';
?>


C'est évidement très limité et à réserver aux âge inférieur à 35 (pour l'heure...).

Une fonction plus complète se trouve sur PHP.net, dans un commentaire de la fonction date(). Cette fonction formatte le jour, le mois et l'année, puis compare les valeurs entre elles pour vérifier que le nombre d'années est exact.

<?
function age($naiss)  {
  list($annee, $mois, $jour) = split('[-.]', $naiss);
  $today['mois'] = date('n');
  $today['jour'] = date('j');
  $today['annee'] = date('Y');
  $annees = $today['annee'] - $annee;
  if ($today['mois'] <= $mois) {
    if ($mois == $today['mois']) {
      if ($jour > $today['jour'])
        $annees--;
      }
    else
      $annees--;
    }
  echo $annees;
  }
age('1948-05-20')
?>


Un autre intérêt de cette fonction est qu'elle prend en compte les date mise au format SQL...
 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page