80 votes

L'analyse de la date en javascript est différente entre safari et chrome

J'ai le code suivant

 var c = new Date(Date.parse("2011-06-21T14:27:28.593Z"));
console.log(c);

Sur Chrome, il imprime correctement la date sur la console. Dans Safari il échoue. Qui a raison et surtout quelle est la meilleure façon pour gérer ça ?

123voto

Erik Points 2514

Vous ne pouvez pas vraiment utiliser Date.parse. Je vous suggère d'utiliser : new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )

Pour diviser la chaîne, vous pouvez essayer

 var s = '2011-06-21T14:27:28.593Z';
var a = s.split(/[^0-9]/);
//for (i=0;i<a.length;i++) { alert(a[i]); }
var d=new Date (a[0],a[1]-1,a[2],a[3],a[4],a[5] );
alert(s+ " "+d);

28voto

Olmstov Points 237

Mon problème similaire était dû au fait que Safari ne savait pas comment lire le fuseau horaire dans un format de fuseau horaire RFC 822. J'ai pu résoudre ce problème en utilisant le format ISO 8601. Si vous avez le contrôle du format de date, je l'ai fait fonctionner avec le SimpleDateFormat de Java "aaaa-MM-jj'T'HH:mm:ss.sssXXX" qui produit pour moi, c'est-à-dire. "2018-02-06T20:00:00.000+04:00". Pour une raison quelconque, Safari ne peut pas lire "2018-02-06T20:00:00.000+0400", notez l'absence de deux points dans le format de fuseau horaire.

 // Works
var c = new Date("2018-02-06T20:00:00.000+04:00"));
console.log(c);

// Doesn't work
var c = new Date("2018-02-06T20:00:00.000+0400"));
console.log(c);

14voto

Londeren Points 504

J'utilise la fonction suivante pour analyser les dates avec le fuseau horaire. Fonctionne bien à la fois Chrome et Safari :

 function parseDate(date) {
  const parsed = Date.parse(date);
  if (!isNaN(parsed)) {
    return parsed;
  }

  return Date.parse(date.replace(/-/g, '/').replace(/[a-z]+/gi, ' '));
}

console.log(parseDate('2017-02-09T13:22:18+0300'));  // 1486635738000 time in ms

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X