Comment gérer json DateTime retourné à partir de WCF Data Services (OData)
Je crois que je suis absent quelque chose d'évident ici. Lorsque je demande une réponse JSON à partir d'un service OData j'obtiens un résultat différent pour le DateTime propriétés que je fais quand je demande XML. Je vais utiliser le NerdDinner flux OData comme un exemple.
JSON:
http://www.nerddinner.com/Services/OData.svc/Dinners(1)?$format=json
"EventDate": "\/Date(1235764800000)\/"
XML:
http://www.nerddinner.com/Services/OData.svc/Dinners(1)
<d:EventDate m:type="Edm.DateTime">2009-02-27T20:00:00</d:EventDate>
Quand je fais un alert(new Date(1235764800000)) j'obtiens ce résultat:
J'ai aussi d'obtenir un résultat de 8 heures du soir lorsque j'exécute la même requête avec LINQPad. Pourquoi le fuseau horaire incorrect dans le résultat JSON? Il semble supposer que la réponse est en GMT. Dois-je les traiter sur le client (via javascript) ou est-ce quelque chose que je peux le mettre sur le serveur?
Je suis à l'aide de jQuery sur le client et les Services de Données WCF (et Entity Framework) sur le serveur.
Mise à jour:
Je suis en utilisant Datejs sur le côté client pour gérer l'UTC datetime mise en forme. Je me demande si c'est la bonne façon d'aller sur ce problème.
function getDateString(jsonDate) {
if (jsonDate == undefined) {
return "";
}
var utcTime = parseInt(jsonDate.substr(6));
var date = new Date(utcTime);
var minutesOffset = date.getTimezoneOffset();
return date.addMinutes(minutesOffset).toString("M/d/yyyy h:mm tt");
}
Vous devez vous connecter pour publier un commentaire.
Selon ce lien msdn,
DateTime
objets sont...Vous êtes donc corriger cela .NET suppose, mais il est UTC au lieu de GMT (si ils sont similaires). Il y a certains bon réponses ici AFIN de donner plus de détails et également fournir des méthodes pour l'analyse du JSON utilisable à jour sur le client.
Aussi loin que la conversion de dates à partir de l'UTC à un moment précis de la zone, sur le serveur, vous pourriez utiliser le
TimeZoneInfo
classe qui a unConvertTimeFromUtc
méthode. Ou vous pourriez écrire un convertisseur personnalisé qui hérite de laJavaScriptConverter
classe. En javascript, il y a lesUTC
etgetTimezoneOffset
méthodes qui pourraient être utilisées.Espère que cette aide et bonne chance.
Si cela peut aider, j'ai été confrontée au même problème et j'ai fini de mettre en place quelque chose comme ça, pas très élégant, mais il fonctionne.
puis sur
$.ajax
succès:J'espère que cela peut vous être utile.
Cela devrait fonctionner très bien:
La fonction substr, prend le "/Date(" partie, et la fonction parseInt obtient le nombre entier et l'ignore ")/" à la fin.
ISO-8601 formatées en JSON dates, il suffit de passer la ficelle dans le constructeur de Date:
Cela a déjà été fixé et que discuté un coup d'oeil à ce post précédent
À l'aide de date.js script.Essayez ci-dessous
Si vous êtes l'analyse de la WCF JSON date de réponses en Javascript, le Moment.js date de cadre élimine une grande partie des maux de tête: Moment.js - l'Analyse ASP.NET JSON Dates. Il a aussi quelques autres pratique des méthodes.
Nous produisons data.js en tant que client de JavaScript pour les services OData. Si vous travaillez à partir d'un client Web, à l'aide de cette bibliothèque va enlever ce mal de tête ainsi que vous empêcher de courir dans d'autres.
Data.js s'occupe de toutes les JSONP et d'autres préoccupations en votre nom, rendant la demande et l'analyse des données JSON simple:
Essayez ceci:
Cette réponse pourrait obtenir voté contre (!!) mais une autre solution est de simplement changer votre Service WCF pour renvoyer les dates au plus amical.
Voici quelques exemples de JSON à partir de mon service WCF, montrant un
UpdateDateOriginal
valeur (à l'aide de l'ennuyeux formatage par défaut de la WCF a utilisé pour ma valeur DateTime), et un plus convivialUpdateDate
version de la même valeur DateTime.Que j'ai affiché le code pour faire cela dans l'article suivant:
Changement de date par défaut de la sérialisation dans WCF