|
|
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...
|
|
|