Je crée une chaîne datetime qui ressemble à ceci: 2010-07-15 11:54:21
Et avec le code suivant, j'obtiens une date invalide dans Firefox mais fonctionne très bien dans Chrome
var todayDateTime = year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + seconds;
var date1 = new Date(todayDateTime);
Dans Firefox, date1 me donne une date invalide, mais dans Chrome, cela fonctionne très bien, quelle en serait la cause principale?
javascript
google-chrome
date
datetime
firefox
pixeldev
la source
la source
Réponses:
Vous ne pouvez pas instancier un objet date comme vous le souhaitez. Cela doit être d'une manière spécifique. Voici quelques exemples valables:
ou
Chrome doit simplement être plus flexible.
Source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
Du commentaire d' Apsillers :
la spécification EMCAScript requiert exactement un format de date (par exemple, AAAA-MM-JJTHH: mm: ss.sssZ) mais les formats de date personnalisés peuvent être librement pris en charge par une implémentation : " Si la chaîne n'est pas conforme à ce format [défini par ECMAScript] la fonction peut revenir à n'importe quelle heuristique spécifique à l'implémentation ou à des formats de date spécifiques à l'implémentation. "Chrome et FF ont simplement différents" formats de date spécifiques à l'implémentation ".
la source
YYYY-MM-DDTHH:mm:ss.sssZ
) mais les formats de date personnalisés peuvent être librement pris en charge par une implémentation : " Si la chaîne n'est pas conforme à ce format [défini par ECMAScript], la fonction peut revenir à des heuristiques spécifiques à la mise en œuvre ou à des formats de date spécifiques à la mise en œuvre. "Chrome et FF ont simplement différents" formats de date spécifiques à la mise en œuvre ".Cela fonctionne dans tous les navigateurs -
Format: AAAA-MM-JJTHH: mm: ss.sss
Détails: http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
la source
Option 1 :
Supposons que votre chaîne temporelle ait un format qui ressemble à ceci:
Dans ce cas, vous pouvez faire une simple regex pour la convertir en
ISO 8601
:Cela produirait la sortie suivante:
Il s'agit du format datetime standard, et donc pris en charge par tous les navigateurs:
Option 2 :
Supposons que votre chaîne temporelle ait un format qui ressemble à ceci:
Ici, vous pouvez faire la regex suivante:
Cela produit également un format pris en charge par tous les navigateurs:
Option 3:
Supposons que vous ayez une chaîne de temps qui ne soit pas facile à ajuster à l'une des normes bien prises en charge.
Dans ce cas, il est préférable de simplement diviser votre chaîne de temps en différentes parties et de les utiliser comme paramètres individuels pour
Date
:la source
Cela fonctionne également dans la plupart des navigateurs
C'est le format de
la source
Si vous souhaitez toujours créer une date à l'aide de tirets, vous pouvez utiliser ce format:
Mais gardez à l'esprit que cela crée du temps en fonction de l'UTC. Cela signifie que si vous vivez dans le fuseau horaire GMT + 3 (3 heures avant GMT), cela ajoutera ce décalage de fuseau horaire à l'heure. Ainsi, l'exemple ci-dessus aura cette valeur, si GMT + 3 (notez qu'il est l'heure 20h00 et non 17h00):
Assurez-vous d'ajouter la lettre «Z» à la fin, car sinon Chrome et Firefox analyseront la chaîne différemment (l'un ajoutera un décalage horaire et l'autre non).
la source
J'avais un problème similaire dans Firefox et Safari lorsque je travaillais avec AngularJS. Par exemple, si une date renvoyée par Angular ressemblait à ceci:
en utilisant ce code:
renvoie une erreur de date non valide dans Firefox et Safari. Cependant, dans Chrome, cela fonctionne bien. Comme l'a indiqué une autre réponse, Chrome est probablement plus flexible avec l'analyse des chaînes de date.
Mon objectif final était de formater la date d'une certaine manière. J'ai trouvé une excellente bibliothèque qui gère à la fois le problème de compatibilité entre navigateurs et le problème de formatage de la date. La bibliothèque s'appelle moment.js .
En utilisant cette bibliothèque, le code suivant fonctionne correctement sur tous les navigateurs que j'ai testés:
Si vous souhaitez inclure cette bibliothèque supplémentaire dans votre application, vous pouvez créer plus facilement votre chaîne de date tout en évitant d'éventuels problèmes de compatibilité du navigateur. En prime, vous aurez un bon moyen de formater, ajouter, soustraire, etc. des dates si nécessaire.
la source
Cela devrait fonctionner pour vous:
J'ai dû créer une date sous forme de chaîne, donc je l'ai fait comme ceci:
N'oubliez pas que les mois en javascript vont de 0 à 11, vous devez donc réduire la valeur du mois de 1, comme ceci:
la source
Solution simple, cela fonctionne avec tous les navigateurs,
la source
Une situation que j'ai rencontrée concernait les millisecondes. FF et IE n'analyseront pas correctement cette chaîne de date lors de la tentative de création d'une nouvelle date.
"2014/11/24 17:38:20.177Z"
Ils ne savent pas comment gérer.177Z
. Chrome fonctionnera cependant.la source
En fait, Chrome est plus flexible pour gérer différents formats de chaîne. Même si vous ne comprenez pas son format de chaîne, Chrome peut toujours convertir avec succès String en date sans erreur. Comme ça:
Mais pour Firefox et Safari, les choses deviennent plus complexes. En fait, dans le document de Firefox, il est déjà dit: ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse )
Donc, lorsque vous souhaitez utiliser Date.parse dans Firefox et Safari, vous devez être prudent. Pour moi, j'utilise une méthode astucieuse pour y faire face. (Remarque: cela peut ne pas toujours être correct dans tous les cas)
Ici, il convertit d'abord 2013-08-08 11:52:18 UTC en 2013-08-08T11: 52: 18Z , puis son format est des mots adaptés dans le document de Firefox. À ce moment, Date.parse sera toujours correct dans n'importe quel navigateur.
la source
C'est ce qui a fonctionné pour moi
Firefox
etChrome
:Bonne chance...
la source
Dans Firefox, toute Date invalide est renvoyée en tant qu'objet Date en tant que Date
1899-11-29T19:00:00.000Z
, vérifiez donc si le navigateur est Firefox puis récupérez l'objet Date de la chaîne"1899-11-29T19:00:00.000Z".getDate()
. Enfin comparez-le avec la date.la source
J'ai utilisé le format de date suivant et cela fonctionne dans tous les navigateurs.
la source