J'ai un morceau suivant de JSON:
\/Date(1293034567877)\/
qui est le résultat de ce code .NET:
var obj = DateTime.Now;
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
serializer.Serialize(obj).Dump();
Maintenant, le problème auquel je suis confronté est de savoir comment créer un objet Date à partir de cela en JavaScript. Tout ce que j'ai pu trouver, c'était une incroyable solution regex (beaucoup contenant des bogues).
Il est difficile de croire qu'il n'y a pas de solution élégante car tout cela est en JavaScrip, je veux dire du code JavaScript essayant de lire JSON (JavaScript Object Notation) qui est censé être un code JavaScript et pour le moment, il s'avère que ce n'est pas parce que JavaScript ne peut pas faites du bon travail ici.
J'ai également vu des solutions d'évaluation que je ne pouvais pas faire fonctionner (en plus d'être signalé comme une menace pour la sécurité).
N'y a-t-il vraiment aucun moyen de le faire de manière élégante?
Question similaire sans vraie réponse:
Comment analyser le format de date JSON ASP.NET avec GWT
la source
new Date()
.Réponses:
Il n'y a pas de représentation JSON standard des dates. Vous devriez faire ce que @jAndy a suggéré et ne pas sérialiser
DateTime
du tout un; envoyez simplement une chaîne de date RFC 1123ToString("r")
ou un nombre de secondes à partir de l'époque Unix, ou quelque chose d'autre que vous pouvez utiliser dans le JavaScript pour construire un fichierDate
.la source
La
JSON.parse
fonction accepte une fonction de relance DateTime facultative. Vous pouvez utiliser une fonction comme celle-ci:Puis appelez
Et vos dates sortiront correctement.
la source
Cette réponse de Roy Tinker ici :
Comme il le dit: La fonction substr prend la partie "/ Date (", et la fonction parseInt obtient l'entier et ignore le ") /" à la fin. Le nombre résultant est passé dans le constructeur Date.
Une autre option consiste simplement à formater correctement vos informations du côté ASP afin que JavaScript puisse les lire facilement. Pensez à faire ceci pour vos dates:
Ce qui devrait renvoyer un format comme celui-ci:
Si vous passez ceci dans un
Date
constructeur JavaScript comme celui-ci:La variable
date
contient maintenant cette valeur:Naturellement, vous pouvez formater cet
DateTime
objet dans n'importe quelle sorte de chaîne / int acceptée par leDate
constructeur JS .la source
si vous utilisez la date ISO8601 de style JavaScript dans JSON, vous pouvez l'utiliser, à partir de MDN
la source
Vous pouvez convertir la date JSON au format de date normal en JavaScript.
la source
Quel est le problème avec:
Cela me renvoie "Wed Dec 22 2010 16:16:07 GMT + 0000 (GMT Standard Time)".
Ou avez-vous besoin de sortir le numéro du json?
la source
\/Date(1293034567877)\/
. Si c'était sain d'esprit, cela afficherait simplement l'heure de l'époque et vous pourriez initialiser un objet Date avec cela.Je sais que c'est un très vieux fil de discussion, mais je souhaite le publier pour aider ceux qui se heurtent à cela comme je l'ai fait.
si vous ne vous souciez pas d'utiliser un script tiers, vous pouvez utiliser moment, js. Ensuite, vous pouvez utiliser .format () pour le formater en tout ce que vous voulez.
la source
Les dates sont toujours un cauchemar. Pour répondre à votre ancienne question, c'est peut-être la manière la plus élégante:
Avec eval, nous convertissons notre chaîne en code javascript. Ensuite, nous supprimons le "/", dans la fonction de remplacement est une expression régulière. Au fur et à mesure que nous commençons avec du nouveau, nos phrases vont exécuter ceci:
Maintenant, une chose que j'ai commencé à utiliser il y a longtemps, ce sont les valeurs longues qui sont représentées par des graduations ... pourquoi? Eh bien, la localisation et arrêtez de penser à la façon dont la date est configurée dans chaque serveur ou chaque client. En fait, je l'utilise aussi dans les bases de données.
Il est peut-être assez tard pour cette réponse, mais peut aider n'importe qui ici.
la source
AngularJS n'a pas non plus pu analyser la
/Date(xxxxxxxxxxxxx)/
chaîne de date .NET JSON .J'ai résolu ce problème en formatant la date en sa représentation sous forme de chaîne ISO 8601 au lieu de vider l'
Date
objet directement ...Voici un exemple de code ASP.NET MVC.
J'ai essayé
RFC 1123
mais cela ne fonctionne pas. Angular traite cela comme une chaîne au lieu de Date.la source
Je n'ai pas utilisé .Net pour des choses comme ça. Si vous parvenez à le faire imprimer quelque chose comme ce qui suit, cela devrait fonctionner.
Notez que, sauf si vous analysez cette chaîne JSON par d'autres moyens ou que vous vous attendez uniquement à ce que les utilisateurs aient des navigateurs modernes avec un analyseur JSON intégré, vous devez utiliser un framework JS ou JSON2 pour analyser la chaîne JSON sortie par le serveur dans un vrai JSON objet.
Lien Wiki
Lien vers le fichier JSON2
Exemple en direct
la source
La réponse à cette question est, utilisez nuget pour obtenir JSON.NET, puis utilisez ceci dans votre
JsonResult
méthode:dans votre vue, faites-le simplement dans
javascript
:S'il s'agit d'un appel ajax:
Une fois
JSON.parse
appelé, vous pouvez mettre la date JSON dans unenew Date
instance carJsonConvert
crée une instance d'heure ISO appropriéela source
la source
Comme Callum l'a mentionné, pour moi, le meilleur moyen est de changer la méthode Controller en string au lieu de JsonResult ".
À partir de la méthode ajax, vous pouvez faire quelque chose comme ça
la source
en utilisant la fonction eval fonctionne, il suffit de supprimer la barre oblique à l'avant et à l'arrière.
donne Thu Jan 01 1970 00:00:00 GMT-0700 (US Mountain Standard Time)
la source
J'ai rencontré un problème avec l'API externe fournissant des dates dans ce format, parfois même avec des informations de différence UTC comme
/Date(123232313131+1000)/
. J'ai pu le transformer enDate
objet js avec le code suivantla source
la source
// Utilisez cette fonction
la source