2012-07-25 15 views
5

¿Alguien sabe cómo analizar un objeto json timespan? Me gustaría devolver el intervalo de tiempo UTC a mi vista, y luego convertirlo a la hora del cliente local, pero no he encontrado ninguna referencia sobre cómo hacerlo.Cómo manejar correctamente el valor del tiempo de db con json y javascript/jquery

estoy usando MVC así que tengo este modelo:

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

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

    } 
} 

y en mi controlador vuelvo este modelo a mi vista como esta:

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

estoy haciendo la llamar así desde el punto de vista:

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

pero en el primer cuadro de alerta, solamente veo esto: [object Object] , así que traté de convertir el intervalo de tiempo en una Fecha, pero en el segundo cuadro de alerta, recibo la Fecha no válida.

Tendré que convertir el intervalo de tiempo en una cadena, y luego concatenar esa cadena con una fecha impar que no necesito para crear una fecha 'válida' y luego convertirla a la hora local, y luego extraer el tiempo de eso?

¿O hay una manera más fácil y más elegante de trabajar con TimeSpans, o simplemente la parte de tiempo de un valor de fecha y hora?

Gracias por cualquier ayuda.

P.S. Puede parecer tonto obtener el tiempo UTCnow solo para convertirlo a la hora local, pero eventualmente obtendré este valor de tiempo UTC de una tabla db - escriba time (0). El método que publiqué anteriormente es simplemente una forma más corta de probar cómo manejar este valor una vez que lo obtengo de la base de datos y luego establecer el valor en el modelo.

+0

Se puede publicar un ejemplo de la JSON que está siendo devuelto? ¿Qué se supone que representa exactamente el lapso de tiempo? ¿Un número de segundos?¿Dos fechas que se pueden mostrar como fechas locales, y se muestra la diferencia entre ellas? – JMM

+0

puede devolver el tipo largo. – Myd

Respuesta

2

El [object Object] que está viendo se debe a que no hay una representación JSON para TimeSpan, por lo que la solución más fácil sería utilizar un formato común para pasar esto, que es de milisegundos.

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

y analizar en el javascript usando el Fecha Fecha de creación (milisegundos), de la siguiente manera siguiente:

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

como cadenas en una forma independiente de la cultura legible:

De Javascript

var dateParam = aDate.toUTCString(); 

a C#

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

Y ahora desde C#

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

a Javascript

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

gracias por sus respuestas. Aunque solo estaba interesado en el tiempo, terminé usando el tipo completo de DateTime porque era más fácil. Después de recibir el DateTime, extraje de él los valores de horas/minutos que necesitaba. – codenewbie

Cuestiones relacionadas