我刚刚找回了一段在清晨写成的代码,其中包含一个根据出生日期计算年龄的函数:
function age($jour, $mois, $annee) { $age = (date('Y') - $annee); if( ($mois - date('m')) > 0 ) { $age = ($age - 1); } if( ($mois - date('m')) == 0 && ($jour - date('d')) > 0 ) { $age = ($age - 1); } return $age; } |
如果这对你有帮助或启发,请不吝打个招呼,这总会让人感到开心!

20 octobre 2017 at 12 h 51 min
Bonjour,
Cette fonction m’a bien servie néanmoins il me semble qu’elle comporte une erreur.
ICI :
– Si le moisNaissance – moisActuel est supérieur à 0 (c.a.d si le mois de naissance est le suivant de celui en cours), alors on enlève 1 à l’age…Ce n’est pas ce qu’on attend il me semble.
– De même pour le jour, le test ne réagit que si le jours de naissance est le suivant du jours en cours.
Le test sur le mois et le jours ne devraient donc t’ils pas être inversés ?
comme cela on retranche 1 pour les dates antérieure à celle du jour et non l’inverse.
c’est d’ailleurs ce qui fonctionne pour moi. autrement cela ne fonctionne pas.
cela donnerais donc :
function age($jour, $mois, $annee)
{
$age = (date(‘Y’) – $annee);
if( ($mois – date(‘m’)) < 0 )
{
$age = ($age – 1);
}
if( ($mois – date('m')) == 0 && ($jour – date('d')) < 0 )
{
$age = ($age – 1);
}
return $age;
}
20 octobre 2017 at 13 h 07 min
Bonjour, merci pour votre remarque, mais si je fais le test concrètement :
Nous sommes le 20 Octobre 2017.
Je suis né disons le 21 Octobre 1986.
age(’21’, ’10’, ‘1986’) nous donnera :
$age = (2017 – 1986); // égale à 31
if( (10 – 10) > 0 ) // faux, égale à 0
{
$age = ($age – 1);
}
if( (10 – 10) == 0 && (21 – 20) > 0 ) // vrai car 10 – 10 = 0 puis 21 – 20 est plus grand que 0
{
$age = ($age – 1); // donc 31 – 1
}
echo $age; // j’ai 30 ans !
20 octobre 2017 at 13 h 24 min
Au temps pour moi…je me suis bien emmêlé les pinceaux…j’ai refais plusieurs test et cela fonctionne très bien avec votre code…(j’ai du faire les premiers test en mélangeant les dates..Vous pouvez supprimer mon premier commentaire si vous souhaitez..désolé (vendredi A-M pour ma défense 😉 )