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?

247voto

vahidg Punkte 3963

Was zurückgegeben wird, sind Millisekunden seit Epoche. Das könnte man tun:

var d = new Date();
d.setTime(1245398693390);
document.write(d);

Wie Sie das Datum genau nach Ihren Wünschen formatieren können, erfahren Sie im vollständigen Date Verweis auf http://www.w3schools.com/jsref/jsref_obj_date.asp

Sie können die Nicht-Ziffern entfernen, indem Sie entweder den Integer parsen ( wie hier vorgeschlagen ):

var date = new Date(parseInt(jsonDate.substr(6)));

Oder Sie wenden den folgenden regulären Ausdruck an (von Tominator in den Kommentaren):

var jsonDate = jqueryCall();  // returns "/Date(1245398693390)/"; 
var re = /-?\d+/; 
var m = re.exec(jsonDate); 
var d = new Date(parseInt(m[0]));

79voto

Jeff Meatball Yang Punkte 35809

Ich wende diese Methode schon seit einiger Zeit an:

using System;

public static class ExtensionMethods {
  // returns the number of milliseconds since Jan 1, 1970 (useful for converting C# dates to JS dates)
  public static double UnixTicks(this DateTime dt)
  {
    DateTime d1 = new DateTime(1970, 1, 1);
    DateTime d2 = dt.ToUniversalTime();
    TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
    return ts.TotalMilliseconds;
  }
}

Angenommen, Sie entwickeln gegen .NET 3.5, ist es eine gerade Kopieren/Einfügen. Ansonsten können Sie es portieren.

Sie können dies in einem JSON-Objekt kapseln oder es einfach in den Antwortstrom schreiben.

Auf der Javascript/JSON-Seite wandeln Sie dies in ein Datum um, indem Sie die Ticks einfach in ein neues Date-Objekt übergeben:

jQuery.ajax({
  ...
  success: function(msg) {
    var d = new Date(msg);
  }
}

34voto

William Niu Punkte 15692

Parsen der Datumszeichenfolge mit String.replace mit Rückverweis:

var milli = "/Date(1245398693390)/".replace(/\/Date\((-?\d+)\)\//, '$1');
var d = new Date(parseInt(milli));

19voto

ytl Punkte 231

Wenn Sie eine DateTime von einem .Net-Code zu einem Javascript-Code, C#:

DateTime net_datetime = DateTime.Now;

javascript behandelt es als Zeichenkette, wie "/Date(1245398693390)/" :

Sie können es wie folgt umwandeln:

// convert the string to date correctly
var d = eval(net_datetime.slice(1, -1))

oder:

// convert the string to date correctly
var d = eval("/Date(1245398693390)/".slice(1, -1))

17voto

davidmdem Punkte 3713

Wenn Sie Schwierigkeiten haben, an die Zeitangaben zu gelangen, können Sie Folgendes versuchen:

    d.date = d.date.replace('/Date(', '');
    d.date = d.date.replace(')/', '');  
    var expDate = new Date(parseInt(d.date));

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