Ich habe ein folgendes Stück JSON:
\/Date(1293034567877)\/
Welches ist ein Ergebnis dieses .NET-Codes:
var obj = DateTime.Now;
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
serializer.Serialize(obj).Dump();
Das Problem, mit dem ich jetzt konfrontiert bin, ist, wie man daraus ein Datumsobjekt in JavaScript erstellt. Alles, was ich finden konnte, war eine unglaubliche Regex-Lösung (viele enthielten Fehler).
Es ist kaum zu glauben, dass es keine elegante Lösung gibt, da dies alles in JavaScrip ist. Ich meine JavaScript-Code, der versucht, JSON (JavaScript Object Notation) zu lesen, das ein JavaScript-Code sein soll, und im Moment stellt sich heraus, dass dies nicht der Fall ist, weil JavaScript dies nicht kann mach hier einen guten Job.
Ich habe auch einige Bewertungslösungen gesehen, die ich nicht zum Laufen bringen konnte (abgesehen davon, dass sie als Sicherheitsbedrohung bezeichnet wurden).
Gibt es wirklich keine Möglichkeit, dies auf elegante Weise zu tun?
Ähnliche Frage ohne echte Antwort:
So analysieren Sie das ASP.NET JSON-Datumsformat mit GWT
quelle
new Date()
.Antworten:
Es gibt keine Standard-JSON-Darstellung von Datumsangaben. Sie sollten das tun, was @jAndy vorgeschlagen hat, und a überhaupt nicht serialisieren
DateTime
. Senden Sie einfach eine RFC 1123-DatumszeichenfolgeToString("r")
oder eine Nummer aus der Unix-Epoche oder etwas anderes, das Sie im JavaScript zum Erstellen einer verwenden könnenDate
.quelle
Die
JSON.parse
Funktion akzeptiert eine optionale DateTime-Reviver-Funktion. Sie können eine Funktion wie diese verwenden:Dann ruf an
Und deine Daten werden richtig herauskommen.
quelle
Diese Antwort von Roy Tinker hier :
Wie er sagt: Die substr-Funktion entfernt den Teil "/ Date (", und die parseInt-Funktion erhält die Ganzzahl und ignoriert das ") /" am Ende. Die resultierende Nummer wird an den Date-Konstruktor übergeben.
Eine andere Möglichkeit besteht darin, Ihre Informationen auf der ASP-Seite einfach richtig zu formatieren, damit JavaScript sie leicht lesen kann. Betrachten Sie dies für Ihre Daten:
Welches sollte ein Format wie dieses zurückgeben:
Wenn Sie dies an einen JavaScript-
Date
Konstruktor wie folgt übergeben:Die Variable enthält
date
jetzt diesen Wert:Natürlich können Sie dieses
DateTime
Objekt in jede Art von Zeichenfolge / int formatieren, die der JS-Date
Konstruktor akzeptiert.quelle
Wenn Sie das ISO8601-Datum im JavaScript-Stil in JSON verwenden, können Sie dieses von MDN aus verwenden
quelle
Sie können das JSON-Datum in JavaScript in das normale Datumsformat konvertieren.
quelle
Was ist falsch mit:
Dies kehrt für mich zurück "Wed Dec 22 2010 16:16:07 GMT + 0000 (GMT Standard Time)".
Oder müssen Sie die Nummer aus dem JSON herausholen?
quelle
\/Date(1293034567877)\/
. Wenn es vernünftig wäre, würde es nur die Epochenzeit ausgeben und Sie könnten damit ein Date-Objekt initialisieren.Ich weiß, dass dies ein sehr alter Thread ist, aber ich möchte dies posten, um denjenigen zu helfen, die wie ich darauf stoßen.
Wenn Sie kein Skript eines Drittanbieters verwenden möchten , können Sie moment, js verwenden. Anschließend können Sie .format () verwenden, um es nach Ihren Wünschen zu formatieren.
quelle
Termine sind immer ein Albtraum. Bei der Beantwortung Ihrer alten Frage ist dies vielleicht der eleganteste Weg:
Mit eval konvertieren wir unseren String in Javascript-Code. Dann entfernen wir das "/", in die Ersetzungsfunktion ist ein regulärer Ausdruck. Wenn wir mit Neu beginnen, werden unsere Sätze dies ausschließen:
Eine Sache, die ich vor langer Zeit verwendet habe, sind lange Werte, die in Ticks dargestellt werden ... warum? Nun, Lokalisierung und denken Sie nicht mehr darüber nach, wie das Datum auf jedem Server oder jedem Client konfiguriert ist. Tatsächlich verwende ich es auch in Datenbanken.
Vielleicht ist diese Antwort ziemlich spät, kann aber jedem helfen, der hier in der Nähe ist.
quelle
AngularJS konnte auch keine .NET JSON-Datumszeichenfolge analysieren
/Date(xxxxxxxxxxxxx)/
.Ich habe dieses Problem behoben, indem ich das Datum auf die ISO 8601-Zeichenfolgendarstellung formatiert habe, anstatt das
Date
Objekt direkt zu sichern ...Hier ist ein Beispiel für ASP.NET MVC-Code.
Ich habe es versucht,
RFC 1123
aber es funktioniert nicht. Angular behandelt dies als Zeichenfolge anstelle von Datum.quelle
Ich habe .Net für solche Dinge nicht verwendet. Wenn Sie in der Lage waren, etwas wie das Folgende auszudrucken, sollte es funktionieren.
Hinweis: Sofern Sie diese JSON- Zeichenfolge nicht auf andere Weise analysieren oder nur erwarten, dass Benutzer über moderne Browser mit einem integrierten JSON-Parser verfügen, müssen Sie ein JS-Framework oder JSON2 verwenden, um die vom Server ausgegebene JSON-Zeichenfolge in eine echte JSON-Zeichenfolge zu analysieren Objekt.
Wiki Link
Link zur JSON2-Datei
Live-Beispiel
quelle
Die Antwort auf diese Frage lautet: Verwenden Sie Nuget, um JSON.NET zu erhalten, und verwenden Sie dies in Ihrer
JsonResult
Methode:Machen Sie dies aus Ihrer Sicht einfach in
javascript
:Wenn es sich um einen Ajax-Anruf handelt:
Nach dem
JSON.parse
Aufruf können Sie das JSON-Datum in einenew Date
Instanz einfügen, daJsonConvert
eine ordnungsgemäße ISO-Zeitinstanz erstellt wirdquelle
quelle
Wie Callum bereits erwähnt hat, ist es für mich am besten, die Controller-Methode in string anstelle von JsonResult zu ändern. "
Mit der Ajax-Methode können Sie so etwas tun
quelle
Bei Verwendung der Eval-Funktion muss lediglich der vordere Schrägstrich vorne und hinten entfernt werden.
ergibt Do 01.01.1970 00:00:00 GMT-0700 (US Mountain Standard Time)
quelle
Ich bin auf ein Problem mit der externen API gestoßen, die Daten in diesem Format bereitstellt, manchmal sogar mit UTC-Differenzinformationen wie
/Date(123232313131+1000)/
. Ich konnte dasDate
Objekt mit folgendem Code drehenquelle
quelle
// Verwenden Sie diese Funktion
quelle