244 Stimmen

Konvertierung von .NET DateTime in JSON

Mögliches Duplikat:
Wie formatiert man ein JSON-Datum?

Mein Webservice gibt einen DateTime an einen jQuery-Aufruf zurück. Der Dienst gibt die Daten in diesem Format zurück:

/Date(1245398693390)/

Wie kann ich dies in ein JavaScript-freundliches Datum umwandeln?

12voto

Flash Punkte 121

Bei der Umrechnung von 1970,1,1 muss das Double auf null Dezimalstellen gerundet werden, denke ich

DateTime d1 = new DateTime(1970, 1, 1);
DateTime d2 = dt.ToUniversalTime();
TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
return Math.Round( ts.TotalMilliseconds,0);

Auf der Client-Seite verwende ich

new Date(+data.replace(/\D/g, ''));

8voto

harry Punkte 81

http://stevenlevithan.com/assets/misc/date.format.js

var date = eval(data.Data.Entity.Slrq.replace(/\/Date\((\d )\)\//gi, "new Date($1)"));  
alert(date.format("yyyy-MM-dd HH:mm:ss"));  
alert(dateFormat(date, "yyyy-MM-dd HH:mm:ss"));

7voto

Dave Archer Punkte 3017

Sie können eine Bibliothek eines Drittanbieters ausprobieren wie json.net Es gibt eine Dokumentation auf der Projektseite. Sie besagt, dass es .net 3.5 erfordert.

Ansonsten gibt es noch eine andere Datei namens Nii.json, die, wie ich glaube, eine Portierung von Java ist. Ich fand einen Link dazu auf dieser Blog

5voto

cowmoo Punkte 136

Die vorherigen Antworten besagen alle, dass Sie Folgendes tun können:

var d = eval(net_datetime.slice(1, -1));

Dies funktioniert jedoch weder in Chrome noch in FF, weil das, was ausgewertet wird, wörtlich genommen wird:

// returns the current timestamp instead of the specified epoch timestamp
var d = Date([epoch timestamp]);

Die korrekte Vorgehensweise ist:

var d = eval("new " + net_datetime.slice(1, -1)); // which parses to

var d = new Date([epoch timestamp]);

4voto

used2could Punkte 4958

Ich dachte, ich füge meine Lösung hinzu, die ich benutzt habe.

Wenn Sie die System.Web.Script.Serialization.JavaScriptSerializer() dann ist die zurückgegebene Zeit nicht spezifisch für Ihre Zeitzone. Um dies zu beheben, müssen Sie auch dte.getTimezoneOffset() um die korrekte Zeit wiederherzustellen.

String.prototype.toDateFromAspNet = function() {
    var dte = eval("new " + this.replace(/\//g, '') + ";");
    dte.setMinutes(dte.getMinutes() - dte.getTimezoneOffset());
    return dte;
}

Jetzt rufen Sie einfach an

"/Date(1245398693390)/".toDateFromAspNet();

Fri Jun 19 2009 00:04:53 GMT-0400 (Eastern Daylight Time) {}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X