2017-02-10 1 views
-1

Nous essayons de formater la date dans une application JavaScript e-commerce. Nous avons essayé d'ajouter "00:00:00" à la chaîne de date. Mais dans IE 11, avec cette chaîne, nous recevons une erreur de date invalide.Date de mise en forme dans IE 11

Nous avons donc essayé quelques options supplémentaires mais la date objet que nous obtenons est inattendu:

1. new Date(2017, 02, 10, 00, 00, 00, 000) --> 
    Fri Mar 10 2017 00:00:00 GMT-0800 (Pacific Standard Time) 

2. new Date("2017-02-10T00:00:00.000Z") --> 
    Thu Feb 09 2017 16:00:00 GMT-0800 (Pacific Standard Time) 

est le seul moyen efficace est d'utiliser « moment.js » pour résoudre ces problèmes.

Merci et salutations

+2

une date est une date à laquelle vous ne formatez pas de date; vous formatez une chaîne. Pouvez-vous s'il vous plaît partager quel est le format "chaîne" que vous voulez pour votre date? Ou ce que vous voulez est couper le temps de votre date? – Dalorzo

+0

S'il vous plaît trouver les détails ici: https://jsfiddle.net/vhLqtu35/17/ – kallada

+1

"* Le seul moyen efficace est d'utiliser" moment.js "pour résoudre ces problèmes. *" Non. Une bibliothèque peut aider, mais est non requis. Probablement un doublon de [* Où puis-je trouver de la documentation sur le formatage d'une date en JavaScript? *] (Http://stackoverflow.com/questions/1056728/where-can-i-find-documentation-on-formatting-a-date -in-javascript? s = 1 | 6.7038) ou [* Comment formater une date JavaScript *] (http://stackoverflow.com/questions/3552461/how-to-format-a-javascript-date?s=2 | 5.7726). – RobG

Répondre

1

On ne sait pas si vous demandez à créer les dates ou les formater sous forme de chaînes. Mais il n'y a rien d'inattendu ici.

new Date(2017, 02, 10, 00, 00, 00, 000) 

Vous ne devez pas utiliser de zéros en tête sur les nombres. Dans certains cas, dans les anciens navigateurs, il peut indiquer octal plutôt que décimal. Quoi qu'il en soit, ce qui précède produira une date "locale" pour le 10 mars 2017 à 00:00:00 en fonction du réglage du fuseau horaire du système hôte. Le vôtre semble être fixé pour UTC-08: 00.

Étant donné:

new Date("2017-02-10T00:00:00.000Z") 

vous demandez au constructeur de date pour analyser une chaîne, quelque chose qu'il est notoirement mauvais à. Cependant, les navigateurs plus anciens que IE 8 devraient l'analyser correctement et produire une date pour le 10 mars 2017 à 00:00:00 UTC, qui a un décalage horaire de 00:00. Comme votre fuseau horaire est -08: 00, lorsque vous l'écrivez en sortie, les valeurs seront ajustées pour le fuseau horaire de l'hôte (c'est-à-dire local) de sorte que vous voyez une date pour le 9 mars 2017 à 16:00:00 (ou 4 pm).

Notez que l'utilisation de Date.prototype.toString entraînera une chaîne dépendante de l'implémentation qui peut être différente dans chaque hôte. Si vous avez besoin d'informations sur le formatage d'une date, voir Where can I find documentation on formatting a date in JavaScript? ou How to format a JavaScript date. Le seul moyen efficace consiste à utiliser "moment.js" pour résoudre ces problèmes. Les problèmes que vous tentez de résoudre ne sont pas clairs, mais une bonne bibliothèque légère d'analyse syntaxique et de formatage est la suivante: fecha.js. Si vous voulez également faire de l'arithmétique, vous pouvez trouver moment.js approprié. Mais il n'est pas difficile d'écrire une fonction pour analyser des formats spécifiques ou créer des chaînes appropriées, voir les liens ci-dessus.