2012-07-25 1 views
5

Kann jemand ein JSON-Zeitspannenobjekt analysieren? Ich möchte die UTC-Zeitspanne zu meiner Ansicht zurückgeben und dann in die lokale Client-Zeit konvertieren, aber ich habe keine Referenz dafür gefunden, wie das geht.Wie Db-Zeitwert mit Json und Javascript/jquery korrekt behandelt werden

Ich verwende mvc so habe ich dieses Modell bekam:

public class TimeSpanModel 
{ 
    public TimeSpan StartTime { get; set; } 

    public TimeSpanModel() 
    { 
     this.StartTime = DateTime.UtcNow.TimeOfDay; 

    } 
} 

und in meinem Controller kehre ich dieses Modell meiner Sicht wie folgt aus:

public ActionResult GetTimeSpanInfo() 
    { 
     TimeSpanModel tsm= new TimeSpanModel(); 
     return Json(tsm); 
    } 

Ich mache die nennen wie dies aus der Sicht:

$.ajax({ 
     type: 'POST', 
     url: '@Url.Content("~/Controller/GetTimeSpanInfo")', 
     success: function (data) { 
     alert(data.StartTime); 
     var dt = new Date(data.StartTime); 
     alert(dt.toString()); 
     } 
    }); 

aber in der ersten Alarm-Box, ich habe nur dies sehen: [object Object] , also habe ich versucht, die Zeitspanne in ein Datum zu konvertieren, aber in der zweiten Alarmbox erhalte ich ein ungültiges Datum.

Muss ich die Zeitspanne in eine Zeichenfolge konvertieren und dann diese Zeichenfolge mit einem ungeraden Datum verketten, das ich nicht brauche, um ein "gültiges" Datum zu erstellen und es dann in Ortszeit zu konvertieren und dann zu extrahieren Die Zeit davon?

Oder gibt es eine einfachere, elegantere Arbeitsweise mit TimeSpans oder nur den Time-Anteil eines Datetime-Wertes?

Danke für jede Hilfe.

P.S. Es mag albern erscheinen, die UTCnow-Zeit nur dazu zu bekommen, sie in die lokale Zeit zu konvertieren, aber ich werde diesen UTC-Zeitwert schließlich von einer db-Tabelle erhalten - geben Sie time (0) ein. Die Methode, die ich oben gepostet habe, ist nur ein kürzerer Weg, um zu testen, wie man mit diesem Wert umgeht, sobald ich ihn von der db bekomme und dann den Wert im Modell festlege.

+0

Können Sie ein Beispiel für die JSON Post, die zurückgegeben wird? Was genau soll die Zeitspanne darstellen? Eine Anzahl von Sekunden?Zwei Datumsangaben, die als lokale Datumsangaben angezeigt werden können und deren Unterschied angezeigt wird? – JMM

+0

Sie können langen Typ zurückgeben. – Myd

Antwort

2

Die [object Object], die Sie sehen, ist, weil es keine JSON-Darstellung für TimeSpan gibt, also wäre die einfachste Lösung, ein gemeinsames Format zu verwenden, um dieses zu übergeben, das Millisekunden ist.

public ActionResult GetTimeSpanInfo() 
    { 
     TimeSpanModel tsm= new TimeSpanModel(); 
     return Json(tsm.TotalMilliseconds.ToString()); 
    } 

und im Javascript analysiert mit dem Date-Konstruktor Date (Millisekunden) wie folgt folgt:

$.ajax({ 
     type: 'POST', 
     url: '@Url.Content("~/Controller/GetTimeSpanInfo")', 
     success: function (data) { 
     alert(data); 
     var dt = new Date(data); 
     alert(dt.toString()); 
     } 
    }); 
2

Als Strings in einer für Menschen lesbare Kultur unabhängigen Art und Weise:

Von Javascript

var dateParam = aDate.toUTCString(); 

zu C#

DateTime aDate = DateTime.ParseExact(dateParam, "r", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None); 

Und jetzt Von C#

DateTime formattedDateFromCSharp = aDate.ToString("r"); 

zu Javascript

var aDate = Date.parse(formattedDateFromCSharp); 
+0

danke für deine Antworten. Obwohl ich nur an der Zeit interessiert war, benutzte ich den vollständigen DateTime-Typ, weil es einfach einfacher war. Nach Erhalt der DateTime extrahierte ich die benötigten Stunden/Minuten. – codenewbie

Verwandte Themen