27 votes

Le constructeur Javascript Date () ne fonctionne pas

J'ai un problème -

Le javascript Date("mm-dd-yyyy") constructeur ne fonctionne pas pour les FF. Il fonctionne très bien pour IE.

  • IE : new Date("04-02-2008") => "Wed Apr 2 00:00:00 EDT 2008"
  • FF2 : new Date("04-02-2008") => Invalid Date

Ainsi permet d'essayer un autre constructeur. Essayer ce constructeur Date("yyyy", "mm", "dd")

  • IE : new Date("2008", "04", "02"); => "Fri May 2 00:00:00 EDT 2008"
  • FF : new Date("2008", "04", "02"); => "Fri May 2 00:00:00 EDT 2008"
  • IE : new Date("2008", "03", "02"); => "Wed Apr 2 00:00:00 EDT 2008"
  • FF : new Date("2008", "03", "02"); => "Wed Apr 2 00:00:00 EDT 2008"

Si l' Date("yyyy", "mm", "dd") constructeur utilise un indice de 0 pour représenter janvier.

Quelqu'un a géré cela?
Il doit y avoir une meilleure façon que soustrayant 1 de la mois.

39voto

matt b Points 73770

C'est la définition de l'objet Date, d'utiliser des valeurs de 0 à 11 pour l' month champ.

Je crois que le constructeur à l'aide d'une Chaîne dépend du système (pour ne pas mentionner locale/fuseau horaire dépendant) alors vous êtes probablement mieux d'utiliser le constructeur de l'endroit où vous spécifiez année/mois/jour comme séparés des paramètres.

BTW, dans Firefox,

new Date("04/02/2008");

fonctionne très bien pour moi - il sera d'interpréter des barres obliques, mais pas les traits d'union. Je pense que cela prouve mon point de vue, l'utilisation d'une Chaîne de construire un objet Date est problemsome. L'utilisation de valeurs explicites pour les mois/jour/année à la place:

new Date(2008, 3, 2);

17voto

joedotnot Points 996

belle astuce en effet, que je viens de découvrir à la dure (en y réfléchissant). Mais j'ai utilisé une chaîne de date plus naturelle avec trait d'union :-)

 var myDateArray = "2008-03-02".split("-");
var theDate = new Date(myDateArray[0],myDateArray[1]-1,myDateArray[2]); 
alert(theDate);
 

3voto

Frank Points 31

En utilisant

 var theDate = new Date(myDate[0],myDate[1]-1,myDate[2]); 
 

C'est bien, mais cela montre des comportements étranges lorsque les valeurs de mois et de jour sont erronées.

Essayez de lancer une date où myDate[1]-1 et myDate[2] ont des valeurs de 55. Javascript renvoie toujours une date, bien que l'entrée ne soit évidemment pas correcte.

J'aurais préféré que javascript renvoie une erreur dans un tel cas.

2voto

Constantine M Points 157

@Frank: vous avez raison. Lorsque vous devez valider la date,

 var theDate = new Date(myDate[0],myDate[1]-1,myDate[2]); 
 

ne fonctionnera pas.

Ce qui se passe, c'est qu'il continue d'ajouter le paramètre supplémentaire. Par exemple:

 new Date("2012", "11", "57") // Date {Sat Jan 26 2013 00:00:00 GMT+0530 (IST)}
 

L'objet date prend les jours supplémentaires (57-31 = 26) et l'ajoute à la date que nous avons créée.

Ou si nous essayons de construire un objet date avec:

 new Date("2012", "11", "57", "57") //Date {Mon Jan 28 2013 09:00:00 GMT+0530 (IST)}
 

2 jours et 9 heures supplémentaires (57 = 24 + 24 + 9) sont ajoutés.

1voto

roenving Points 1194

Vous avez tout à fait raison, le mois est indiqué comme un indice, donc janvier est le mois numéro 0 et décembre est le mois numéro 11 ...

- et il n'y a pas de solution de contournement comme cela est clairement indiqué dans la définition du script ECMA, bien que des astuces simples fonctionnent généralement:

 var myDate = "2008,03,02".split(",");
var theDate = new Date(myDate[0],myDate[1]-1,myDate[2]); 
alert(theDate);
 

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