Comportement incohérent de toLocaleString () dans un navigateur différent
Je suis en train de travailler sur un projet où je dois beaucoup à la Date et l'Heure. Côté serveur de la technologie est ASP.Net et à côté client, je suis à l'aide de jQuery et jQuery Semaine Civile(plugin jQuery).
Donc, ici, est le problème décrit, je suis la réception de Données à partir du serveur de quelque chose comme cela 2012-11-13T04:45:00.00
en format GMT.
Maintenant à côté client, je veux que cette Date de Temps pour être converti en lieu de la Date Format de l'Heure, comme tout ce qui est pourrait être IST, de l'est, PKT, etc.
Pour atteindre cet objectif, je suis en utilisant la méthode JavaScript toLocaleString()
. Cela ne fonctionne bien en Chrome, en d'autres navigateur, il fonctionne de façon incohérente.
Voici ses résultats dans les différents navigateurs:
Google Chrome(Fonctionne très bien):
Appel:
new Date ("2012-11-13T04:45:00.00").toLocaleString();
De sortie:
Tue Nov 13 2012 10:15:00 GMT+0530 (India Standard Time)
Mozilla Firefox:
Appel:
new Date ("2012-11-13T04:45:00.00").toLocaleString();
De sortie:
Tuesday, November 13, 2012 4:45:00 AM
Safari:
Appel:
new Date ("2012-11-13T04:45:00.00").toLocaleString();
De sortie:
Invalid Date
Internet Explorer:
Appel:
new Date ("2012-11-13T04:45:00.00").toLocaleString();
De sortie:
Tuesday, November 13, 2012 4:45:00 AM
Pour l'instant ce sont les navigateurs que j'ai testé.
Ici est la Question:
J'ai besoin d'un moyen de convertir des Données en Temps(ayant un format comme ça 2012-11-13T04:45:00.00
) les paramètres Régionaux de la Date et de l'Heure, quel que soit le navigateur client.
source d'informationauteur Ishan Dhingra
Vous devez vous connecter pour publier un commentaire.
La réponse courte est non. toLocaleString peut être mis en œuvre, cependant les développeurs souhaitent. Ce que votre question implique, c'est que Chrome sorties la chaîne que vous souhaitez.
Si vous voulez à la sortie de ce format de manière cohérente, vous aurez besoin d'utiliser une bibliothèque comme DateJS.
De le faire avec DateJS aurez besoin d'un certain standard de spécificateurs de format disponibles dans core.js et certains qui ne sont disponibles que dans extras.js. La documentation a une liste de tous les spécificateurs de format.
La chaîne que vous voulez, c'est:
De sorte à obtenir ce à partir de DateJS vous aurez besoin de:
La syntaxe pour DateJS est:
Au lieu d'utiliser
toLocaleString()
qui est obsolète et mis en œuvre de manière incorrecte pour tous les navigateurs webje vous suggère fortement de l'aide Globaliser pour la date & temps de mise en forme.Ensuite pour le format de la date sur le côté client, tout ce que vous avez à faire est d'attribuer valide de la culture et de simplement appeler la fonction format:
Assez simple, n'est-ce pas? Eh bien, vous aurez également l'intégrer à votre ASP.Net l'application, ce qui complique un peu les choses. Tout d'abord, vous aurez besoin de faire référence à la globalize.js de la façon habituelle:
Alors il est préférable d'inclure le droit de la définition de la culture, qui est celui que vous devez utiliser lors de la mise en forme:
Enfin, vous devez définir
theCulture
variable avant de l'utiliser:Bien sûr la solution la plus élégante façon de le faire, serait de créer une propriété ou de la méthode dans le code-behind qui va écrire les scripts appropriés pour vous et puis juste une référence de la méthode, de dire:
Alors tout ce que vous avez à faire, c'est faire référence à cette méthode dans l' (maître?) la page de la tête:
Certaines questions
Si vous voulez le faire correctement à 100%, vous aurez besoin de renforcer la Mondialisation de la culture générateur d'inclure
'g'
commutateur de format, puis utiliser ce commutateur sur le côté client au format de date:Pourquoi est-ce? Parce que le " g " est un format de date par défaut. C'est ce que vous obtenez lorsque vous appelez simplement
DateTime
'sToString()
méthode sans paramètres (ce qui impliqueCultureInfo.CurrentCulture
comme le seul paramètre...). Le format par défaut est le meilleur, il va être soit à court ou long, ou tout autre, mais les plus couramment utilisés par les gens à l'aide de cette culture.J'ai dit que
toLocaleString()
est pas le cas pour tous les navigateurs web. Pourquoi est-ce? C'est parce qu'il va utiliser les navigateurs web les paramètres et de ne pas le côté serveur détecté de la culture. Cela signifie, que vous risquez d'avoir des cultures mixtes dans la même page web. Qui peut se produire si certains de vos dates sont formatées sur le côté serveur et quelques autres sur le côté client. C'est pourquoi nous avons besoin de passer (détecté) de la culture à partir du côté serveur.BTW. Si vous décidez d'inclure le régional de la boîte de dialogue des préférences de votre application web, l'écart serait encore plus visible, comme
toLocaleString()
ne suivent pas les paramètres de l'utilisateur...Pour convertir un moment à une version particulière sur le serveur, vous pouvez utiliser la méthode DateTime.ToLongDateString. Sur cette page, voir la remarque sur la "culture actuelle de l'objet" (sur le serveur) de la classe DateTimeFormatInfo. Assurez-vous que c'est réglé correctement.
La cause de ce problème n'a jamais été abordée par les réponses. L'OP a dit:
GMT n'est pas un format. Cette chaîne est dans la norme ISO 8601 format étendu, sans aucune zone de temps spécifiée. La norme ISO 8601 spec dit que sans qualificatif, ce qui est destiné à représenter heure locale. Pour spécifier GMT, vous ajoutez un
Z
à la fin, ou vous pouvez ajouter un offset comme+00:00
.Le problème est, ECMAScript (v1 - v5.1) n'a pas l'honneur de cette disposition dans la spec. Il a dit en fait qu'doit être interprété comme l'UTC au lieu de l'heure locale. Certains navigateurs ont honoré la norme ISO spec, certains honoré l'ECMA spec. Cela a été corrigé pour la version 6, et la plupart des navigateurs ont respecté.
Si - si vous avez l'intention de transmettre UTC/GMT à base d'horodateurs, puis sur le côté serveur, vous devez toujours envoyer un
Z
donc il n'y a pas d'ambiguïté.Encore, même si la valeur est correctement interprété, il n'y a aucune garantie que les chaînes seront formatés de la même manière sur tous les navigateurs. Pour cela, vous n'avez en effet besoin d'une bibliothèque. Je recommande moment.jsmais il en existe d'autres.