"Je souhaiterai non pas afficher
que le nombre de jours entre 2 dates, mais aussi le nombre de mois
et d'années. En fait, le but serait d'afficher ceci sur mon site :
'le site est ouvert depuis X ans, X mois et X jours'."
Un
problème, une interrogation ? Adressez-vous à la rédaction
de JDNet Développeurs
Malgré notre article "Manipulation
de la date en PHP", certains calculs peuvent encore être
compliqués à réaliser. Nous allons ici pousser
la complétude en affichant le temps sous cette forme : "5
ans, 7 mois, 2 semaines, 5 jours, 14 heures, 37 minutes et 29 secondes".
Nous partons ici du principe que le nombre de secondes entre les
deux dates a déjà été calculé.
Tout ce qu'il nous reste à faire, c'est d'en extraire successivement
le nombre d'années, puis de mois, puis de jours... jusqu'à
arriver à un nombre de secondes ne dépassant pas la
minutes.
On pourrait soustraire au fur et à mesure le nombre de secondes
équivalents à une année, puis de mois, puis
de semaines... à l'aide
de moult boucles while(), mais ce
ne serait pas très élégant. Nous allons ici
profiter de l'opérateur %, qui nous donne le reste d'une
division, ce qui est exactement ce dont nous avons besoin (et nous
permet par ailleurs de montrer que % n'est pas qu'utile à
découvrir si un nombre est pair ou impair...).
Notez que plus le nombre de secondes est grand, moins le résultat
peut être vrai, étant donné que nous utilisons
des mois de 30 jours, ce qui implique un décalage...
Le code
<?php
$nbrSecondes = date("U");
// secondes depuis le 01/01/1970
$nbrSecParJour = 3600*24;
$nbrSecParAn = $nbrSecParJour*365.25;
$nbrSecParMois = $nbrSecParJour*30;
$nbrAnnees = floor($nbrSecondes / $nbrSecParAn);
$reste = $nbrSecondes % $nbrSecParAn;
$nbrMois = floor($reste / $nbrSecParMois);
$reste = $reste % $nbrSecParMois;
$nbrSemaines = floor($reste / ($nbrSecParJour*7));
$reste = $reste % ($nbrSecParJour*7);
$nbrJours = floor($reste / $nbrSecParJour);
$reste = $reste % $nbrSecParJour;
$nbrHeures = floor($reste / 3600);
$reste = $reste % 3600;
$nbrMinutes = floor($reste / 60);
$reste = $reste % 60;
echo $nbrSecondes . ' secondes se sont écoulées depuis le 1er Janvier
1970 à minuit, c\'est-à-dire '
. $nbrAnnees . ' année(s), '
. $nbrMois . ' mois, '
. $nbrSemaines . ' semaine(s), '
. $nbrJours . ' jour(s), '
. $nbrHeures . ' heure(s), '
. $nbrMinutes . ' minute(s) et '
. $reste . ' seconde(s).';
?>
|