Bonjour à tous,
Je développe un site pour ma fille (1 an depuis peu) et j'avais une ligne qui ne marchait pas très bien jusqu'à il y a peu... Ayant trouvé tous les bugs, je vous met le code ci après. Pour ceux qui ont un(e) petit(e) et qui on envie d'afficher son age de manière plus naturelle... que "426 jours aujourd'hui" par exemple.
C'est une fonction qui n'affiche rien. Elle retourne la chaîne à afficher dans votre code sous la forme "6 ans, 3 mois et 2 jours" ou "6 ans et 3 mois", etc. selon la date.
<?php
function AgeLong($dateNaissance,$datedujour)
{ // Formats des dates "2009-10-13"
$Jour=substr($datedujour,8,2);
$Mois=substr($datedujour,5,2);
$Annee=substr($datedujour,0,4);
$NJour=substr($dateNaissance,8,2);
$NMois=substr($dateNaissance,5,2);
$NAnnee=substr($dateNaissance,0,4);
switch($Annee)
{ //_________________________________________________ années précédentes
case $Annee < $NAnnee :
echo "/(Erreur sur année de naissance)";
break;
//_________________________________________________ même année
case $NAnnee :
switch($Mois)
{
case $Mois < $NMois:
$Age = "/(Erreur sur année de naissance)";
break;
case $NMois:
switch($Jour)
{
case $Jour < $NJour:
$Age = "/(Erreur sur année de naissance)";
break;
case $NJour:
$Age ="moins d'un jour";
break;
case $Jour > $NJour:
IF (($Jour - $NJour)==1) {$Age = $Jour - $NJour." jour";}
ELSE {{$Age = $Jour - $NJour." jours";}}
break;
}
break;
case $Mois > $NMois:
switch($Jour)
{
case $Jour < $NJour:
$AgeMois=$Mois - $NMois-1;
$MaxjMois=date("t", mktime(0, 0, 0, ($Mois-1), 1, $Annee));
$AgeJour=$MaxjMois-$NJour+$Jour;
IF ($AgeMois==0)
{ IF ($AgeJour==1) {$Age = $AgeJour." jour";}
ELSE {$Age = $AgeJour." jours";}
}
ELSE { $Age = $AgeMois." mois et ".$AgeJour." jours";}
$Age=$Age." [1]";
break;
case $NJour:
$AgeMois=$Mois - $NMois;
$Age = $AgeMois." mois";
$Age=$Age." [2]";
break;
case $Jour > $NJour:
$AgeMois=$Mois - $NMois;
$AgeJour=$Jour-$NJour;
IF ($AgeJour==1) {$Age = $AgeMois." mois et ".$AgeJour." jour";}
ELSE {$Age = $AgeMois." mois et ".$AgeJour." jours";}
$Age=$Age." [3]";
break;
}
break;
}
break;
//_________________________________________________ années suivantes
case $Annee > $NAnnee :
switch($Mois)
{
case $Mois < $NMois:
$AgeAnnee=$Annee - $NAnnee -1;
switch($AgeAnnee)
{ case 0 :
$Age="";
break;
case 1 :
$Age=$AgeAnnee." an";
break;
default:
$Age=$AgeAnnee." ans";
break;
}
switch($Jour)
{
case $Jour < $NJour:
$AgeMois=(2+$Mois-1)." mois ";
$MaxjMois=date("t", mktime(0, 0, 0, ($Mois-1), 1, $Annee));
$AgeJour=($MaxjMois-$NJour)+$Jour;
IF ($Age!="" ) {$Age=$Age.", ";}
IF ($AgeJour==1) {$Age=$Age.$AgeMois." et ".$AgeJour." jour";}
ELSE {$Age=$Age.$AgeMois." et ".$AgeJour." jours";}
break;
case $NJour:
$AgeMois=2+$Mois." mois ";
IF ($Age=="" ){$Age=$AgeMois;}
ELSE {$Age=$Age." et ".$AgeMois;}
break;
case $Jour > $NJour:
$AgeMois=2+$Mois." mois ";
$AgeJour=$Jour-$NJour;
IF ($Age!="" ) {$Age=$Age.", ";}
IF ($AgeJour==1) {$Age=$Age.$AgeMois." et ".$AgeJour." jour";}
ELSE {$Age=$Age.$AgeMois." et ".$AgeJour." jours";}
break;
}
break;
case $NMois:
switch($Jour)
{
case $Jour < $NJour:
$AgeAnnee=$Annee - $NAnnee -1;
switch($AgeAnnee)
{ case 0 :
$Age="";
break;
case 1 :
$Age=$AgeAnnee." an";
break;
default:
$Age=$AgeAnnee." ans";
break;
}
$AgeMois=(2+$Mois-1)." mois ";
$MaxjMois=date("t", mktime(0, 0, 0, ($Mois-1), 1, $Annee));
$AgeJour=($MaxjMois-$NJour)+$Jour;
IF ($Age!="" ) {$Age=$Age.", ";}
IF ($AgeJour==1) {$Age=$Age.$AgeMois." et ".$AgeJour." jour";}
ELSE {$Age=$Age.$AgeMois." et ".$AgeJour." jours";}
break;
case $NJour:
$AgeAnnee=$Annee - $NAnnee;
IF ($AgeAnnee==1) {$Age=$AgeAnnee." an "; }
ELSE {$Age=$AgeAnnee." ans ";}
break;
case $Jour > $NJour:
$AgeAnnee=$Annee - $NAnnee;
IF ($AgeAnnee==1) {$AgeAnnee=$AgeAnnee." an";}
ELSE {$AgeAnnee=$AgeAnnee." ans";}
$AgeJour=$Jour-$NJour;
IF ($AgeJour==1) {$Age=$AgeAnnee." et ".$AgeJour." jour";}
ELSE {$Age=$AgeAnnee." et ".$AgeJour." jours";}
break;
}
break;
case $Mois > $NMois:
$AgeAnnee=$Annee - $NAnnee;
IF ($AgeAnnee==1) {$AgeAnnee=$AgeAnnee." an";}
ELSE {$AgeAnnee=$AgeAnnee." ans";}
switch($Jour)
{
case $Jour < $NJour:
IF (($Mois-$NMois-1)==0) {$AgeMois="";}
ELSE {$AgeMois=($Mois-$NMois-1)." mois ";}
$MaxjMois=date("t", mktime(0, 0, 0, ($Mois-1), 1, $Annee));
$AgeJour=($MaxjMois-$NJour)+$Jour;
IF ($AgeMois!="" ){$AgeAnnee=$AgeAnnee.", ";}
IF ($AgeJour==1) {$Age=$AgeAnnee.$AgeMois." et ".$AgeJour." jour";}
ELSE {$Age=$AgeAnnee.$AgeMois." et ".$AgeJour." jours";}
break;
case $NJour:
$AgeMois=($Mois-$NMois)." mois ";
$Age=$AgeAnnee." et ".$AgeMois;
break;
case $Jour > $NJour:
$AgeMois=($Mois-$NMois)." mois ";
$AgeJour=$Jour-$NJour;
IF ($AgeJour==1) {$Age=$AgeAnnee.", ".$AgeMois." et ".$AgeJour." jour";}
ELSE {$Age=$AgeAnnee.", ".$AgeMois." et ".$AgeJour." jours";}
break;
}
break;
}
break;
}
return $Age;
}
?>