Calculer l'écart entre deux dates

Il s'agit d'afficher le message "Cette page n'a plus été mise à jour depuis ...". Pour ce faire, il faut calculer la différence entre la date d'aujourd'hui et la date de dernière modification de la page.

JavaScript représente une date sous la forme d'un nombre indiquant le nombre de millisecondes écoulées depuis le 1er janvier 1970. Calculer la différence entre deux dates revient donc à calculer la différence entre deux nombres. Le résultat est un nombre.

function mfDepuis()
{
last = new Date(document.lastModified) ;
today = new Date() ;
alert(today-last) ;
}

Le résultat peut être converti en un objet Date

function mfDepuis()
{
last = new Date(document.lastModified) ;
today = new Date() ;
elapsed = new Date(today-last) ;
alert(elapsed) ;
}

En travaillant sur cet objet, on détermine facilement le nombre de jours, mois et années écoulés depuis la dernière modification. L'illustration ci-dessus montre la date du 1er janvier 1970. Il s'est donc écoulé 0 jour, 0 mois et 0 année. La méthode getDate() renvoyant le jour du mois, il faudra soustraire 1 pour connaître le nombre de jours écoulés entre deux jours anniversaires. La méthode getMonth() renvoie un nombre entre 0 et 11 et son résultat est directement exploitable. La méthode getYear() renvoie un nombre entre 0 et 99 pour les années entre 1900 et 1999 sinon elle renvoie un nombre de 4 chiffres (il semble que Mozilla ne respecte pas cette convention). Puisque la date de référence est 1970, il faudra soustraire 70 (s'il s'est écoulé 0 année, la date calculée est en 1970 !)

function mfDepuis(){
last = new Date(document.lastModified) ;
today = new Date() ;
elapsed = new Date(today-last)
days = elapsed.getDate()-1 ; // soustraire 1
months = elapsed.getMonth() ;
years = elapsed.getYear() - 70 ; // soustraire 70
alert (days + ' ' + months + ' ' + years) ;
}

Il ne reste plus qu'à peaufiner le résultat. S'il y a moins d'un mois, on renvoie le nombre de jours écoulés. S'il y a moins d'un an, on renvoie le nombre de mois écoulés et s'il y a plus d'un an, on renvoie le nombre d'années écoulées. Par exemple : "Cette page n'a plus été mise à jour depuis 10 jours" ou "Cette page n'a plus été mise à jour depuis 3 mois". Voilà l'occasion appliquer l'instruction conditionnelle if. Cette instruction n'exécutera un bloc d'instructions que si une condition est vérifiée. Pour rappel, elle prend la forme

if (<condition>) {

<bloc d'instructions>

}

L'instruction peut également présenter une alternative

if (<condition>) {

<bloc d'instructions>

}
else {

<bloc d'instructions>

}

ou une succession d'alternatives

if (<condition>) {

<bloc d'instructions>

}
else if (<condition>) {

<bloc d'instructions>

} else {

<bloc d'instructions>

}

La condition est une expression basée sur un opérateur de comparaison et peut combiner plusieurs comparaisons par les opérateurs booléens. Dans l'exemple ci-dessous, nous utilisons l'opérateur d'égalité ==, l'opérateur plus grand que > et l'opérateur booléen ET &&

function mfDepuis(){
last = new Date(document.lastModified) ;
today = new Date() ;
elapsed = new Date(today-last) ;
days = elapsed.getDate()-1 ;
months = elapsed.getMonth() ;
years = elapsed.getYear() - 70 ;
if (years == 0 && months == 0 && days == 0) {

buf = "aujourd'hui" ;

}
else if (years > 5) {

buf = "des lustres" ;

}
else if (years > 1) {

buf = years + " ans" ;

}
else if (years == 1) {

buf = "1 an";

}
else if (months > 0) {

buf = months + " mois" ;

}
else if (days > 1) {

buf = days + " jours " ;

}
else {

buf = "1 jour" ;

}
return buf ;
}

Il n'y a plus qu'à faire appel à la fonction mfDepuis() dans la page html.

<body>
<h1>Cinéma Belge point be</h1>
<script type="text/javascript">
document.write("<p>Attention, cette page n'a plus été mise à jour depuis" + mfDepuis() + "</p>") ;
</script>

Exercice

Modifier la fonction pour qu'elle renvoie le détail des jours et des mois, par exemple "depuis 2 mois et 11 jours" ou "depuis 3 ans 4 mois et 6 jours".

Valid XHTML 1.0!