2012-07-25 8 views
5

Qualcuno sa come analizzare un oggetto timepan json? Desidero restituire l'intervallo di tempo UTC alla mia visualizzazione e quindi convertirlo all'ora del client locale, ma non ho trovato alcun riferimento su come farlo.Come gestire correttamente il valore del tempo db con json e javascript/jquery

sto usando MVC Così ho questo modello:

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

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

    } 
} 

e nel mio controller I tornare questo modello per mio punto di vista in questo modo:

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

sto facendo il chiamare in questo modo dal punto di vista:

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

ma nella prima finestra di avviso, vedo solo questo: [object Object] quindi ho provato a convertire l'intervallo di tempo in una data, ma nella seconda casella di avviso, ottengo la data non valida.

Devo convertire l'intervallo di tempo in una stringa e quindi concatenare quella stringa con una data dispari di cui non ho bisogno per creare una data "valida" e quindi convertirla in ora locale e quindi estrarre il tempo da quello?

Oppure esiste un modo più semplice ed elegante di lavorare con TimeSpans o solo la parte Time di un valore datetime?

Grazie per qualsiasi aiuto.

P.S. Può sembrare sciocco ottenere il tempo UTCnow solo per convertirlo in ora locale, ma alla fine otterrò questo valore UTC da un db table - type time (0). Il metodo che ho postato sopra è semplicemente un modo più breve per testare come gestire questo valore una volta ottenuto dal db e quindi impostare il valore nel modello.

+0

Puoi pubblicare un esempio di JSON che viene restituito? Qual è esattamente l'intervallo di tempo che dovrebbe rappresentare? Un numero di secondi?Due periodi di tempo che possono essere visualizzati come datetimes locali e la differenza tra loro mostrati? – JMM

+0

è possibile restituire il tipo lungo. – Myd

risposta

2

Il numero [object Object] visualizzato è perché non esiste una rappresentazione JSON per TimeSpan, quindi la soluzione più semplice sarebbe utilizzare un formato comune per passare questo, che è millisecondi.

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

e analizzare in javascript con il Data Data costruttore (millisecondi), come segue segue:

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

come stringhe in modo indipendente la cultura leggibile:

Da Javascript

var dateParam = aDate.toUTCString(); 

a C#

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

Ed ora Da C#

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

a JavaScript

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

grazie per le vostre risposte. Anche se mi interessava solo il tempo, ho finito per usare il tipo completo DateTime perché era solo più semplice. Dopo aver ricevuto il DateTime, ho estratto i valori di ore/minuti necessari. – codenewbie

Problemi correlati