2012-11-02 3 views
0

J'ai la ligne suivante, qui génère un horodatage valide dans FF et Chrome:IE9 objet Date manutention

new Date('2012 11 2 00:00:00 GMT').getTime(); 

Cependant, dans IE9, je reçois NaN. Que faut-il faire différemment pour que cette ligne soit compatible avec tous les navigateurs?

+0

duplication possible de [Comment puis-je convertir la chaîne en datetime avec spécification de format en JavaScript?] (Http://stackoverflow.com/questions/476105/how-can-i-convert-string-to-datetime-with- format-specification-in-javascript) –

Répondre

1

Le format de date que vous utilisez doit être conforme à la spécification EMCAscript, il se trouve juste que Firefox et Chrome sont plus indulgents à propos de l'analyse syntaxique.

Le format doit être:

YYYY-MM-DDTHH:mm:ss.sssZ 

Donc, essayez ceci:

new Date('2012-11-02T00:00:00.000Z').getTime() 

Cela ne fonctionnera pas dans les anciennes versions de IE. Si vous avez besoin d'une compatibilité totale, reportez-vous à l'autre réponse.

+0

MDN n'est pas une autorité, [ECMA-262] (http://ecma-international.org/ecma-262/5.1/#sec-15.9.1.15) est. Tous les navigateurs ne prennent pas en charge le format ISO spécifié, et ceux qui le sont sont incohérents. Il vaut mieux analyser manuellement les chaînes de date. – RobG

+0

Le format ISO échoue dans les anciennes versions d'Internet Explorer. L'analyse manuelle des dates est le seul moyen d'obtenir des résultats cohérents dans un large éventail de navigateurs utilisés. – RobG

+0

@RobG Vrai, mais il a dit IE9 dans la question. Je vais ajouter une note pour plus de clarté. – loganfsmyth

1

Le seul moyen fiable de convertir une chaîne en date est de l'analyser manuellement. Vous pouvez utiliser une bibliothèque, mais quoi que vous utilisiez, vous devez connaître le format, il est donc généralement plus simple de le faire vous-même.

Dans le cas de « 2012 11 2 00:00:00 GMT » (ce qui est conforme à ISO8601 et donc l'analyse dépend de l'implémentation), si le fuseau horaire est toujours UTC, vous pouvez utiliser:

function stringToDate(s) { 
    var b = s.split(/\D/); 
    return new Date(Date.UTC(b[0], --b[1], b[2], b[3], b[4], b[5])); 
} 

L'objet de date résultant aura un décalage de fuseau horaire basé sur le paramètre système du client, qui doit être correct, mais peut ne pas l'être.