IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

La Date ISO 8601 est mal traitée par les navigateurs [Trucs & Astuces]


Sujet :

Contribuez

  1. #1
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut La Date ISO 8601 est mal traitée par les navigateurs
    La norme internationale ISO 8601 spécifie la représentation
    numérique de la date et de l'heure. Cette notation est
    particulièrement destinée à éviter tout risque de confusion
    dans les communications internationales dû au grand nombre
    de notations nationales différentes. De plus, cette notation
    a de nombreux avantages pour une utilisation informatique
    par rapport aux autres notations. Elle est reprise par la
    norme française sous la référence NF EN 28601.
    Oui elle a de nombreux avantages pour une utilisation informatique, mais l'informatique la traite très mal.

    J'ai testé Chrome 6, Firefox 4 et IE 8.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    console.log("Date ISO 2010-09-13 = " + new Date("2010-09-13") + ", " + new Date("2010-09-13").getTime());
    console.log("Date 2010/09/13 = " + new Date("2010/09/13") + ", " + new Date("2010/09/13").getTime());
    console.log("Date 2010,8,13 = " + new Date(2010, 8, 13) + ", " + new Date(2010, 8, 13).getTime());
     
    function isoDate(s){
    	s = s.replace(/\-/g,"/");
     
    	return new Date(s).getTime();
    };
     
    function shortDate(s){
    	s = s.replace(/\-/g,"/");
    	s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$2/$1");
    	return new Date(s).getTime();
    }
     
    console.log("2010-09-13 = " + isoDate("2010-09-13"));
    console.log("2010/09/13 = " + shortDate("2010/09/13"));
    console.log("13/09/2010 = " + shortDate("13/09/2010"));
    Chrome 6

    Date ISO 2010-09-13 = Mon Sep 13 2010 00:00:00 GMT+0200 (Paris, Madrid (heure d'�t�)), 1284328800000
    Date 2010/09/13 = Mon Sep 13 2010 00:00:00 GMT+0200 (Paris, Madrid (heure d'�t�)), 1284328800000
    Date 2010,8,13 = Mon Sep 13 2010 00:00:00 GMT+0200 (Paris, Madrid (heure d'�t�)), 1284328800000

    2010-09-13 = 1284328800000
    2010/09/13 = 1284328800000
    13/09/2010 = 1284328800000

    Firefox 4

    Date ISO 2010-09-13 = Mon Sep 13 2010 02:00:00 GMT+0200, 1284336000000
    Date 2010/09/13 = Mon Sep 13 2010 00:00:00 GMT+0200, 1284328800000
    Date 2010,8,13 = Mon Sep 13 2010 00:00:00 GMT+0200, 1284328800000

    2010-09-13 = 1284328800000
    2010/09/13 = 1284328800000
    13/09/2010 = 1284328800000

    Internet Explorer 8

    Date ISO 2010-09-13 = NaN, NaN
    Date 2010/09/13 = Mon Sep 13 00:00:00 UTC+0200 2010, 1284328800000
    Date 2010,8,13 = Mon Sep 13 00:00:00 UTC+0200 2010, 1284328800000

    2010-09-13 = 1284328800000
    2010/09/13 = 1284328800000
    13/09/2010 = 1284328800000

    1977-04-22T01:00:00-05:00 correspond au 22 avril 1977, à 1h du matin heure normale de l'est de l'Amérique du Nord (soit 5 heures de décalage).

    1977-04-22T06:00:00Z correspond au même instant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    console.log(new Date("1977-04-22T01:00:00-05:00"));
    console.log(new Date("1977-04-22T06:00:00Z"));
    Chrome 6

    Invalid Date
    Fri Apr 22 1977 08:00:00 GMT+0200 (Paris, Madrid (heure d'�t�))

    Firefox 4

    Fri Apr 22 1977 08:00:00 GMT+0200 {}
    Fri Apr 22 1977 08:00:00 GMT+0200 {}

    Internet Explorer 8

    NaN
    NaN

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    Ha ben ça fait plaisir de voir que l'on va vers une uniformisation qui simplifiera le vie des codeurs

    J'avais en effet déja croisé un souci d'interprétation de date UTC avec chrome... mais là ...

    vive le w3c et les standards
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonjour

    J'ai refait les tests avec la nouvelle génération de navigateur : IE9, C10 et F4.

    Le test n° 2 est réussi par tous les navigateurs.

    Le test n° 1 pose toujours le même problème à F4 et IE9 l'imite.

    Mais il y a une solution universelle !

    Dans un programme JavaScript il faut toujours écrire une date ISO en utilisant le format long version US : aaaa-mm-jjThh:mm:ss.nnn+hh:mm ou -hh:mm soit pour l'instant en cours : 2011-04-26T10:28:30.000+02:00 (GMT + 2 en été !)

    // Firefox 4
    Date ISO 2010-09-13T00:00:00.000+02:00 = Mon Sep 13 2010 00:00:00 GMT+0200, 1284328800000
    Date ISO 2010-09-13 = Mon Sep 13 2010 02:00:00 GMT+0200, 1284336000000

    // Chrome 10
    Date ISO 2010-09-13T00:00:00.000+02:00 = Mon Sep 13 2010 00:00:00 GMT+0200 (Central Europe Daylight Time), 1284328800000
    Date ISO 2010-09-13 = Mon Sep 13 2010 00:00:00 GMT+0200 (Central Europe Daylight Time), 1284328800000

    // IE 9
    Journal : Date ISO 2010-09-13T00:00:00.000+02:00 = Mon Sep 13 00:00:00 UTC+0200 2010, 1284328800000
    Journal : Date ISO 2010-09-13 = Mon Sep 13 02:00:00 UTC+0200 2010, 1284336000000

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/09/2011, 18h19
  2. Détecter si un champs de formulaire est pré-rempli par le navigateur
    Par Palca dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 14/09/2011, 18h19
  3. Le JavaScript mal géré par les navigateurs ?
    Par Kerod dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 17/06/2009, 08h28
  4. Réponses: 1
    Dernier message: 26/06/2007, 08h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo