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. |
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 |
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) //--></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 |
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. |
|
||
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 |