Comment parser JSON pour recevoir un objet Date en JavaScript?
J'ai un morceau de JSON:
\/Date(1293034567877)\/
qui est une conséquence de cette .NET code:
var obj = DateTime.Now;
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
serializer.Serialize(obj).Dump();
Maintenant, le problème, je suis confronté est de savoir comment créer un objet à partir de cette Date en JavaScript.
Tout ce que je pouvais trouver était incroyable regex solution (contenant de nombreux bugs).
Il est difficile de croire qu'il n'existe pas de solution élégante, comme c'est tout en JavaScrip, je veux dire le code JavaScript d'essayer de lire JSON (JavaScript Object Notation), qui est censé être un code JavaScript et en ce moment, il s'avère qu'elle n'est pas la cause de JavaScript ne peut pas faire un bon travail ici.
J'ai aussi vu certains eval solutions qui je ne pouvais pas faire le travail (en plus d'être souligné que la menace à la sécurité).
Est-il vraiment aucun moyen de le faire d'une manière élégante?
La même question sans réelle réponse à:
Comment analyser ASP.NET JSON format de Date avec GWT
- Vous pouvez simplement passer le timestamp du client et d'en appeler
new Date()
sur elle. - Si j'avais le timestamp que je pouvais, mais j'ai JSON JavaScript qui ne semble pas le comprendre [sic!]
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de standard de représentation JSON de dates. Vous devez faire ce que @jAndy suggéré et pas sérialiser un
DateTime
à tous; il suffit d'envoyer un RFC 1123 chaîne de dateToString("r")
ou une secondes-de-Unix-époque de numéro, ou une autre chose que vous pouvez utiliser dans le JavaScript pour la construction d'unDate
.Le JSON.analyser la fonction accepte une option DateTime reviver fonction. Vous pouvez utiliser une fonction comme ceci:
Alors appel
Et de vos dates sortira le droit
a = Date.parse(value)
au lieu de/\/Date\((\d*)\)\//.exec(value);
?De cette réponse de Roy Bricoler ici:
Comme il le dit: La fonction substr, prend le "/Date(" partie, et la fonction parseInt obtient le nombre entier et l'ignore ")/" à la fin. Le nombre résultant est passé dans le constructeur de Date.
Une autre option est de simplement le format de vos informations correctement sur l'ASP secondaires tels que JavaScript peut facilement lire. Envisager de le faire pour votre dates:
Qui devrait revenir à un format comme ceci:
Si vous passez ce, dans un JavaScript
Date
constructeur comme suit:La variable
date
détient désormais cette valeur:Naturellement, vous pouvez mettre en forme ce
DateTime
objet dans ce genre de string/int la JSDate
constructeur accepte.si vous utilisez le style JavaScript ISO8601 date en JSON, vous pouvez l'utiliser, à partir de MDN
Vous pouvez convertir en JSON Date normale de format de date en JavaScript.
Quel est le problème avec:
Cela renvoie pour moi "Mer 22 Déc 2010 16:16:07 GMT+0000 (GMT Standard Time)".
Ou avez-vous besoin pour obtenir le nombre le json?
\/Date(1293034567877)\/
. S'il était sain d'esprit, il serait juste de sortie de l'époque et vous avez pu initialiser un objet Date avec qui.{ date: 1293034567877 }
. Ensuite, vous pouvez gonfler dans un objet Date en JS,foo.date = new Date(foo.date);
Date
type quand il peut être représenté comme unString
?Je sais que c'est un très vieux thread mais je tiens à ce post pour aider ceux qui bosse dans ce comme je l'ai fait.
si vous n'avez pas de soins sur l'utilisation de la 3ème partie de script, vous pouvez utiliser moment,js
Ensuite, vous pouvez utiliser .format() pour formater ce que vous voulez.
Les Dates sont toujours un cauchemar. Pour répondre à votre vieille question, c'est peut-être la façon la plus élégante:
Avec eval nous convertir notre chaîne de code javascript. Puis on enlève le " /" dans la fonction remplacer est une expression régulière. Comme nous commençons à nouveau, alors nos peines d'exécution ceci:
Maintenant, une chose que j'ai commencé à utiliser il y a longtemps, est longue les valeurs qui sont représentées dans les tiques... pourquoi? bien, de localisation et d'arrêter de penser à quelle date est configuré sur chaque serveur ou chaque client. En fait, je l'utilise aussi dans les bases de données.
Est peut-être très en retard pour cette réponse, mais peut aider quelqu'un arround ici.
AngularJS ne pouvait pas analyser .NET JSON date
/Date(xxxxxxxxxxxxx)/
chaîne soit..Je dérober à cette question par le formatage de la date ISO 8601 représentation sous forme de chaîne au lieu de dumping la
Date
objet directement...Voici un échantillon de ASP.NET MVC code..
J'ai essayé
RFC 1123
mais ça ne fonctionne pas.. Angulaire traite cela comme une chaîne de caractères au lieu de la Date.Je ne l'ai pas utilisé .Net pour ce genre de choses. Si vous avez été en mesure de l'obtenir à l'impression de quelque chose de ce genre, il doit travailler.
Note, sauf si vous êtes l'analyse que JSON chaîne par d'autres moyens ou seulement attendre les utilisateurs à moderne browers avec un construit en JSON analyseur, vous devez utiliser un JS-cadre ou JSON2 pour analyser la chaîne JSON retourné par le serveur dans un véritable objet JSON.
Lien Wiki
Lien vers JSON2 fichier
Live Exemple
La réponse à cette question est, utiliser nuget pour obtenir JSON.NET puis utiliser cette l'intérieur de votre
JsonResult
méthode:à l'intérieur de votre point de vue simple de le faire dans
javascript
:Si c'est un appel ajax:
Une fois
JSON.parse
a été appelé, vous pouvez mettre le JSON date dans unnew Date
exemple parce queJsonConvert
crée une bonne ISO instance au moment de l'Que Callum mentionné, pour moi, le meilleur moyen est de changer la méthode de Contrôleur à la chaîne, au lieu de JsonResult".
De l'ajax méthode, vous pouvez faire quelque chose comme ceci
utilisant la fonction eval travaille juste à supprimer la barre oblique à l'avant et à l'arrière.
rendements Jeu 01 Jan 1970 00:00:00 GMT-0700 (états-unis Heure normale des rocheuses)
J'ai couru dans un problème avec l'API externe fournit les dates dans ce format, quelques fois même avec UTC différence info comme
/Date(123232313131+1000)/
. J'ai été en mesure de tourner jsDate
objet avec le code suivant//Utilisation de cette fonction