2017-06-02 1 views
0

Dies kann eine mögliche Duplikat sein, aber ich poste dies nach dem Suchen viel und versuchen verschiedene Methode.Json Datum zu C# MVC Datum

Ich übergeben Modell als JsonResult in Ajax-Erfolg und die Bindung an Steuerelemente. In meinem Modell habe ich eine Datetime-Eigenschaft, die einen richtigen Datumswert erhält, aber in meinem Ajax-Erfolg wird es in etwas wie dieses '/ Date (1493749800000) /' umgewandelt.

Jetzt, wenn ich den Datetime-Wert für weitere Funktion in Datetime-Eigenschaft meines MVC-Modells verwenden möchte, wird es null.

Bitte schlagen Sie einen Weg vor, wie ich mit diesem Szenario umgehen kann.

Dinge, die ich versucht: Date.parse(), JSON.parse(), String.Replace()

+0

Ist 1493749800000 wird vom Browser an den Server gesendet (dh von JS generiert) oder vom Server an den Browser (dh von C# generiert)? – mjwills

+0

Bitte lesen Sie [diese] (https://Stackoverflow.com/a/726869/2534646), [diese] (https://Stackoverflow.com/a/42662967/2534646) Antworten, es wird Ihnen helfen – Curiousdev

+0

arent, dass Ticks ? – pitersmx

Antwort

0

IMHO, ist es immer besser mit Zeitdaten zu arbeiten, wenn Backend tun - Kommunikation Frontend. Auf diese Weise verringern Sie die Wahrscheinlichkeit, bei der Konvertierung Probleme zu bekommen. Hier haben Sie zwei Funktionen, die Arbeit von Ihrem api zu machen:

 public static DateTime UnixTimeStampToDateTime(double unixTimeStamp) 
     { 
      System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc); 
      dtDateTime = dtDateTime.AddSeconds(unixTimeStamp).ToLocalTime(); 
      return dtDateTime; 
     } 

     public static long DateTimeToUnixTimeStamp(DateTime value) 
     { 
      long epoch = (value.ToUniversalTime().Ticks - 621355968000000000)/10000000; 
      return epoch; 
     } 
0

Dies ist, wie ich in einem meiner früheren Projekt tat, Ich gehe davon aus, dass Sie alle Ihre Daten einschließlich Datum in Ihrem Ajax-Erfolg Methode bekam. Nun

success: function(data) 
{ 
    var jsonDate = data.myDateField; 
    var value = new Date(parseInt(jsonDate.toString().substr(6))); 
    var finalResult = value.getMonth() + 1 + "/" + value.getDate() + "/" + 
        value.getFullYear(); 
} 

So ist finalResult Ihr Datum, die Sie erwarten. Jetzt können Sie das in Ihrem HTML so einfach rendern.

Für weitere Informationen, besuchen Sie this blog, geschrieben von großen Hanselman.

Bellow ist das Snippet und nimmt Ihr Datum vom Server. Mach es einfach. And dont confuse mit der Zeichenfolge /Date(1493749800000)/ mit der finalResult. Ich meine das Datum nach der Konvertierung. Da dies das tatsächliche Datum ist, das Sie in Ihrer Datenbank gespeichert haben.

var jsonDate = "/Date(1493749800000)/"; 
 
var value = new Date(parseInt(jsonDate.toString().substr(6))); 
 
var finalResult = value.getMonth() + 1 + "/" + value.getDate() + "/" + 
 
        value.getFullYear(); 
 
console.log(finalResult); 
 
//alert(finalResult);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Hoffe, es hilft. Prost! :)

+0

jsonDate.sub (6) das gibt mir Fehler –

+0

Das ist der Fehler: VM922: 2 Uncaught TypeError: jsonDate.sub ist keine Funktion –

+0

Überprüfen Sie meine aktualisierte Antwort oben. Es funktioniert gut. Sie müssen toString() dort hinzufügen. Auch wenn ich toString() nicht benutze funktioniert es immer noch gut. Prost –

0

Ich glaube, Sie unterhalb der Linie können Sie Ihre serealize Datum, so etwas deserealize: JsonConvert.DeserializeObject<DateTime>(yourDate);

Sie können deserealize Sie auch folgende Art und Weise Modell:

JsonConvert.DeserializeObject<YouModel>(JsonModelData);

+0

zusammen mit datetime habe ich andere Eigenschaften auch, die in meinem Modell –

+0

@AdityaPewekar übergeben werden, Bitte sehen Sie meine aktualisierte Antwort! –

0
var input = '/Date(464560200000)/' 
var a = /\/Date\((\d*)\)\//.exec(input); 
var d = new Date(+a[1]);