2010-07-18 7 views
1

La page fonctionne correctement dans Chrome, mais j'ai une erreur mineure dans FF et un problème différent dans IE. L'assistance avec l'un ou l'autre de ces problèmes est grandement appréciée. Depuis ive été perplexes dans l'erreur FF le plus long, je vais commencer par celle-là:Date (dateString) renvoyant la date non valide dans FF

Voici le code: http://truxmapper.appspot.com/sched.html

Le sélecteur de date sélectionne une date au format « 07-08-2010 23:28 ". Maintenant, j'ai besoin de passer ce temps en paramètre à mon servlet, qui attend le temps représenté comme long. Ce n'est pas un problème en chrome. L'objet Date accepte une chaîne au format donné ci-dessus, mais lorsque j'essaie d'utiliser getTime() à une date instanciée avec une chaîne dans FF, il renvoie NaN. Donc, ce que j'ai fait dans le sur la page que j'ai liée à est un peu de manipulation demandant à l'utilisateur de ré-entrer les dates si elle est lue comme NaN. Ce n'est évidemment pas une solution bandaid puisque même si vous entrez à nouveau la date, il va toujours lire NaN. J'ai besoin de savoir pourquoi la fonction Date instanciera en utilisant la chaîne que vous voyez dans le champ de texte de saisie dans FF.

Dans IE, pour une raison quelconque, il me dit que sTime est indéfini.

Merci!

Répondre

3

Essayez

new Date(Date(dateString)).getTime() 

(se sent comme une solution laide ...)

Edit: Cela produira un résultat erroné.


Le format de date utilisé en Javascript doit être de la forme YYYY MM DD HH:mm:ss. Vous pouvez convertir le format dans ce formulaire avec

// dateString = "07-08-2010 23:28"; 
dateString = dateString.replace(/(\d+) (\d+) (\d+)/, '$3-$1-$2'); 

Mais comme mentionné dans le commentaire, il n'y a pas de norme format de date utilisé par Javascript avant que la norme ECMAScript 5. Il est préférable d'analyser la dateString directement:

m = dateString.match(/(\d+)-(\d+)-(\d+) (\d+):(\d+)/) 
date = new Date(+m[3], m[1]-1, +m[2], +m[4], +m[5]); // Note: January = 0. 
+0

Wow qui a très bien fonctionné, merci! Je ne comprends pas le raisonnement derrière votre suggestion de le faire de cette façon, cependant. En ce qui concerne la norme, je veux m'interfacer pour afficher la date telle que vous la voyez maintenant. Est-ce que vous recommandez que je formate la chaîne de sorte qu'elle adhère à la norme? Aussi, comprenez-vous ce qui peut se passer dans IE? –

+0

Quel est le but de cette solution de contournement? 'new Date (dateString) .getTime()' devrait être bon, bien que 'new Date (Date.parse (dateString)). getTime()' pourrait également être utile si vous ne faites pas confiance au Date ctor pour prendre une chaîne (Je semble me souvenir que certaines implémentations anciennes ne le seront pas). Le chrome analysera également «2010-07-08 23: 28: 00» mais pas «2010-07-08T23: 28: 00»; Je ne suis pas sûr que le «T» est une bonne idée ... –

+1

@Kenny: Notez que le format ISO8601 a été introduit par la norme ECMAScript 5, qui n'est pas encore largement pris en charge, également dans la version précédente, ES3, il y a no * format standard * décrit, la seule exigence de la spécification est que la méthode 'Date.parse' devrait être capable d'analyser une chaîne comme le produisent les méthodes' toString' ou 'toUTCString' des objets' Date', et ces méthodes sont complètement dépendante de l'implémentation. Le moyen le plus sûr serait de l'analyser manuellement ... – CMS

5

Ce format de date est ambigu. Essayez-le comme yyyy-mm-dd au lieu de mm-jj-aaaa ou jj-mm-aaaa.

Questions connexes