HTML - Navigateurs

Dossier : Les formats de date et leurs erreurs suivant le navigateur.

 


Les dates du vingtième et du vingt-et-unième siècle. haut de page

L'objet "Date" (voir Javascript - Date) est disponible sur les trois navigateurs, mais ne fonctionne pas de la façon dont on pourrait s'attendre .

<Script language="JavaScript"><!--
function aff(t)
{var d=document, ln="<br>";
d.write(t.toLocaleString(),ln);
d.write(t.getTime(),ln);
d.write("an ",t.getYear(),ln);
}

aff(new Date(0)); //org
aff(new Date(74,11,24));
aff(new Date(1900,11,24));
aff(new Date(2000,11,24));
aff(new Date(-1000));// -1 seconde
aff(new Date(1899,11,24));
//--></Script>

En effet ; il est tous à fait normale d'imaginer que cette objet travail avec un jour, un mois et une année. C'est un peu ce qu'il se passe, mais avec quelques bidouilles en plus.
L'objet "Date" existe dans le langage Javascript de base, ce qui signifie qu'il a été définit bien avant 1990. A cette époque, nous utilisions encore le format sur deux chiffres pour coder une année. C'est ce choix qui est la source actuel des différences dans l'évolution de cette objet.


Voici les résultat affiché par le programme ci-dessus :

01/01/1970 01:00:00
0
an 70
12/24/1974 00:00:00
157071600000
an 74
12/24/1900 00:00:00
-2178147600000
an 0
12/24/2000 00:00:00
977612400000
an 2000
01/01/1970 00:59:59
-1000
an 70
12/24/1899 00:00:00
-2209683600000
an 1899
Thursday, January 01, 1970 01:00:00
0
an 70
Tuesday, December 24, 1974 00:00:00
157071600000
an 74
Monday, December 24, 1900 00:00:00
-2178147600000
an 0
Sunday, December 24, 2000 00:00:00
977612400000
an 100
Thursday, January 01, 1970 00:59:59
-1000
an 70
Sunday, December 24, 1899 00:00:00
-2209683600000
an -1
01/01/1970 01:00:00
0
an 70
24/12/74 00:00:00
157071600000
an 74
undefined
-1000

an null
24/12/00 00:00:00
977612400000
an 100
undefined
-1000

an null
undefined
-1000

an null

Déduction :
- Opéra ne gère pas les dates antérieurs au 1/1/1970 (en rouge).
- IE et NS n'affichent pas la date au format locale du pays (date en format US, c'est-à-dire mois/jour/année), bien que se soient des versions françaises. Seul Opéra, qui est une version anglaise (de langage), prend en charge les "paramètres régionaux".
- IE travail avec des dates en format long (4 chiffres) pour toutes les années hors de l'intervalle [0;99].
- NS et Opéra utilise le format de date court à additionner avec 1900, quelque soit l'année.

<Script language="JavaScript"><!--
function my_getYear4()
{var an=this.getYear();
return (an<1900)?1900+an:an;}
Date.prototype.getYear4 = my_getYear4;

var d=new Date(2000,11,24)
document.write(d.getYear4());

//--></Script>

Nous devrons donc toujours vérifier l'année d'une date (<1900) avant de travailler avec. Je vous propose une méthode à greffer sur l'objet "Date" pour effectuer cette vérification.
Il est aussi possible d'écrire directement le code suivant :

Date.prototype.getYear4 = new Function ("var an=this.getYear(); return (an<1900)?1900+an:an;");


Les dates du premier siècle haut de page

Il est impossible de gérer les dates du premier siècle directement par l'objet "Date" du Javascript, car elles appartient à l'intervalle [0;99].

Une solution pour atteindre ces dates, est l'affectation directe du nombre UTC.

Mais cela ne signifie pas que le navigateur pourra traiter l'information.

<Script language="JavaScript"><!--
function aff(t)
{var d=document, ln="<br>";
d.write(t.toLocaleString(),ln);
d.write(t.getTime(),ln);
d.write("an ",t.getYear(),ln);
}

aff(new Date(-1,0,24));
aff(new Date(-62135596800000));
aff(new Date(-62135596800000
  -(1*24*60*60*1000))); // -1 jour
//--></Script>

L'exemple suivante illustre ce propos.

01/24/2 B.C. 00:00:00
-62196771600000
an -1
01/01/1 01:00:00
-62135596800000
an 1
12/31/1 B.C. 01:00:00
-62135683200000
an 0
Sunday, January 24, 000/ 00:00:00
-62196771600000
an -1901
Monday, January 01, 0001 01:00:00
-62135596800000
an -1899
Sunday, December 31, 0000 01:00:00
-62135683200000
an -1900
erronés

Le rouge indique une erreur : effectivement, il n'y a pas d'année 0 ; il existe l'an 1 avant J.C., et l'an 1 après J.C.

  toLocaleString() getYear()
Dates après J.C. :
correct. correct
correct ne pas oublier d'ajouter 1900
Date avant J.C. :
correct erroné de -1
erroné erroné de -1. Il suffira d'ajouter 1899

 


Dernière mise à jour : dimanche 06 janvier 2008