2009-07-06 6 views
21

Qu'est-ce qu'une méthode de construction de chaîne invariante par culture pour que le constructeur Javascript Date() puisse l'analyser et créer l'objet date approprié?Le bon Javascript Date.parse (...) format chaîne?

J'ai essayé ces chaînes de format qui ne fonctionnent pas (en utilisant C# pour générer les chaînes):

clientDate.ToString(); 
// gives: "11/05/2009 17:35:23 +00:00" 

clientDate.ToString("MMM' 'dd', 'yyyy' 'h':'mm':'ss' 'tt"); 
// works on an English server 
// but on a French server, gives: "mai 11, 2009 5:35:23" 
// Javascript won't parse that. 

clientDate.ToString("MM'-'dd'-'yyyy' 'HH':'mm':'ss") 
// gives: 05-11-2009 17:35:23 

Quel est le format universel ??

+0

bonne question, c'est un problème difficile – annakata

+0

Pourquoi voulez-vous une seule chaîne pour cela? – Boldewyn

+0

Je dois émettre une chaîne dans le navigateur pour pouvoir ensuite utiliser Javascript pour localiser la chaîne, en utilisant la fonction toLocaleString() de Javascript. Cependant, j'ai eu de la difficulté à trouver un format de chaîne unique réussi qui sera émis par tous mes serveurs. –

Répondre

19

According to MDC:

d'une chaîne représentant un temps, parse retourne la valeur temporelle. Il accepte la syntaxe de la norme IETF (RFC 1123 Section 5.2.14 et ailleurs): "Mon, 25 Dec 1995 13:30:00 GMT". Il comprend les abréviations de fuseau horaire du continent américain, mais pour un usage général, utilisez un décalage de fuseau horaire, par exemple, "Mon, 25 Dec 1995 13:30:00 GMT+0430" (4 heures, 30 minutes à l'est du méridien de Greenwich). Si vous ne spécifiez pas de fuseau horaire, le fuseau horaire local est supposé. GMT et UTC sont considérés comme équivalents.

Si vous ne pouvez pas générer ce format à l'aide locale anglais, essayez d'utiliser Date.UTC

+0

RFC 1123 à la rescousse! Merci Maciej! –

1

Si vous voulez un format indépendant des paramètres régionaux Javascript peut analyser, vous pouvez utiliser 2013-03-31T16:36:57+0900. Cela fonctionne au moins dans Node.js et Chrome, donc je pense que c'est standard.

+0

Ne fonctionne pas sur Android 2.2 (fonctionne sur 2.3 et supérieur). Ne fonctionne sur aucun appareil iOS (testé 5.0 et 6.0). –

+0

Que diriez-vous de '2013-03-31T16: 36: 57Z' alors? Fonctionne ici sur iOS. La différence est le temps doit maintenant être GMT. – jcayzac

+1

Si seulement c'était si simple ... Ce format (il s'appelle ISO-8601) ne fonctionnera pas non plus dans IE8. –

Questions connexes