2012-07-25 64 views
5

有谁知道如何解析json时间跨度对象? 我想将UTC时间范围返回到我的视图,然后将其转换为本地客户端时间,但我没有找到任何有关如何执行此操作的参考。如何使用json和javascript/jquery正确处理db时间值

我使用MVC所以我有了这个模型:

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

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

    } 
} 

,并在我的控制器我这个模型回到我的看法是这样的:

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

我正在做的这样调用从视图:

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

,但在第一个警告框,我只看到这一点:[对象的对象] 所以我尝试将时间范围转换为日期,但在第二个警报框中,我收到无效日期。

我需要将时间范围转换为字符串,然后将该字符串与某些我不需要的奇数日期连接起来,以创建“有效”日期,然后将其转换为本地时间,然后提取那个时间?

还是有更容易,更优雅的方式来使用TimeSpans,或只是日期时间值的时间部分?

感谢您的任何帮助。

P.S.将UTCnow时间转换为本地时间似乎很愚蠢,但我最终会从db表中获取UTC时间值 - 类型time(0)。我在上面发布的方法只是一个简短的方法来测试如何处理这个值,一旦我从数据库中获得它,然后在模型中设置值。

+0

你能发布这类返回的JSON的例子吗?应该代表什么时间跨度?几秒钟?两个日期时间可以显示为本地日期时间,并显示它们之间的区别? – JMM 2012-08-04 16:48:38

+0

您可以返回长类型。 – Myd 2012-08-07 09:19:47

回答

2

您看到的[object Object]是因为TimeSpan没有JSON表示,因此最简单的解决方案是使用通用格式来传递此值,即毫秒。使用Date构造日期(毫秒)在JavaScript

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

和解析,如下所示:

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

作为人类可读培养无关的方式字符串:

来自Javascript

var dateParam = aDate.toUTCString(); 

到C#

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

现在从C#

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

为Javascript

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

感谢您的回答。即使我只对时间感兴趣,但我最终使用了完整的DateTime类型,因为它更容易。收到DateTime后,我从中提取了我需要的小时/分钟值。 – codenewbie 2012-09-24 01:00:15