2017-02-21 13 views
0

Ich habe eine MVC-Website gebaut und ich bin vorbei zu der Ansicht in meinem Modell und versuche, es in einigen Javascript in der Ansicht zu verwenden mit:Parsing Datum in Json Codierte Array

var records = @Html.Raw(Json.Encode(Model)); 

ich das Ziel bin über die Verwendung Diese Datensätze in einem benutzerdefinierten Kalenderobjekt, das ein Objektarray als Datenquelle akzeptiert. Die Datenquelle erwartet jedoch Datumsvariablen, um zu wissen, wo Termine zu setzen sind usw. Ich habe gelesen, dass Json kein eigenes Datumsformat hat. So sind alle Daten, die von der kodieren zurückgegeben werden formatiert sind wie:

/Date(1462921200000)/ 

Das Objekt scheint nicht, dies zu akzeptieren und nichts auf der Ansicht gezeigt. In den Posts, die ich gelesen habe, haben sie angegeben, dass Sie das Datum wieder in das richtige Format zurückversetzen können, aber das scheint nur auf einzelne Werte zu beruhen.

Meine Frage ist: Gibt es eine einfache Möglichkeit, das codierte Objekt, das ich habe, zu nehmen und die Daten im richtigen Format zu analysieren? Oder müsste ich sie durchlaufen, um es zu tun?

Danke.

+0

Das sieht nicht wie roher JavaScript aus. Verwenden Sie eine Präprozessor-Technologie? –

+1

Mögliches Duplikat von [ASP.NET MVC JsonResult-Datumsformat] (http://stackoverflow.com/questions/726334/asp-net-mvc-jsonresult-date-format) –

Antwort

0

Asp.Net MVC-Anwendung geben die Daten standardmäßig im ISO-8601-Format zurück. Sie können den Wert in der Client-Seite mit einer Funktion wie folgt konvertieren:

function ConvertDate(dateString) { 
    return new Date(parseInt(dateString.replace("/Date(", "").replace(")/", ""), 10)); 
    } 

Oder Sie können eine Bibliothek wie momentjs (https://momentjs.com/docs/#/parsing/asp-net-json-date/) verwenden:

moment("/Date(1198908717056-0700)/"); // 2007-12-28T23:11:57.056-07:00 
0

Haftungsausschluss: Frage nicht identifiziert wurde als ASP.NET, als ich diese Antwort verfasste. Ich gehe davon aus, dass das OP nach einer Funktion fragt, die von seinem noch zu veröffentlichenden Framework bereitgestellt wird. Ich behalte die Antwort, weil ich denke, dass es für die manuelle Entschlüsselung in JavaScript-JavaScript gültig ist.


Das Format kann mit einem einfachen regulären Ausdruck

var asText = "Date(1462921200000)"; 
 
var asDate = null; 
 
var parsed = asText.match(/^Date\((\d+)\)$/); 
 
if (parsed!==null) { 
 
\t asDate = new Date(+parsed[1]); 
 
} 
 
console.log(asDate);

1

Warnung analysiert werden: Diese Antwort ist eigenwillig. Der oppositionierte Teil ist: Wenn Sie etwas mit Json getan haben, verwenden Sie Json.Net.

namespace System.Web.MVC 
{ 
    public static class HtmlHelperJsonExtensions 
    { 
    public string JsonEncode(this System.Web.MVC.HtmlHelper html, object o) 
    { 
     var jsonSettings = new Newtonsoft.Json.JsonSerializerSettings() 
     { 
     // Here you can apply a LOT of formatting, as a small example regarding dates: 
     // 1 - formats dates as iso strings (probably what you want) 
     DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat, 
     // 2 - formats dates with Microsoft format (what you're experiencing) 
     //DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat, 
     // 3 - formats date in a custom format as for DateTime.ToString(string) overload 
     //DateFormatString = "yyyy-MM-dd" 
     Formatting = Indented 
     }; 

     var json = Newtonsoft.Json.JsonConvert.SerializeObject(o, jsonSettings); 

     return html.Raw(json); 
    } 
    } 
} 

Verbrauch:

var records = @Html.JsonEncode(Model); 

finden die hervorragende Json.Net Dokumentation here für Einsichten.