2010-07-26 39 views
0

我在json日期解析中遇到了一个奇怪的问题。我使用以下解析JSON日期:当本地计算机和服务器在不同的时区时,Json返回不同的日期

dateFormat(new Date(parseInt(user.RegDate.substr(6))), "mm/dd/yyyy") 

当我的本地计算机(客户端)是从服务器时区不同的时区,然后返回不同的日期,当我尝试检索注册日期用户。

对于前:

在SQL注册日期:2010-07-22 19:00:00.000

当我在本地机,这是在IST时区调试,从JsonResult返回的日期是:

/Date(1279805400000)/ 
Thu Jul 22 19:00:00 UTC+0530 2010 

同当我从部署在EST时区的服务器访问数据时,从JsonResult返回的日期为:

/Date(1279843200000)/ 
Fri Jul 23 05:30:00 UTC+0530 2010 

这工作完美(返回相同的日期 - 星期四7月22日)当我将本地机器更改为EST时区。我在这里错过了什么?请建议

了服务器代码[编辑]:

public JsonResult GetregisteredUsersJSON() 
{ 
    var usersList = this.GetregisteredUsers() 
    return Json(usersList, JsonRequestBehavior.AllowGet); 
} 

private List<Users> GetregisteredUsers() 
{ 
    return (from u in _context.mu_Users 
     orderby u.Reg_Date descending 
     select new Users 
     { 
      FirstName = u.First_Name, 
      LastName = u.Last_Name, 
      RegDate = u.Reg_Date 
     }).ToList(); 
} 
+0

相关的问题 - http://stackoverflow.com/questions/2532729/daylight-saving-time-and-timezone-best-practices – Oded 2010-07-26 19:23:39

回答

1

我强烈怀疑这是在你的服务器端的问题,以及误解格式化的客户端的价值。

你应该发送UTC值,而它看起来像你发送的本地值。我假设你的数据库中的值是UTC值 - 否则整个事情就会变得随意。当你的服务器改变时区时,你发送一个不同的值应该是一个很大的警告灯。当你调用Date构造函数时只需要一毫秒的值,这意味着自UTC 1970年1月1日以来的毫秒数。

假设您的值是1900 UTC,那么您的请参见您的IST客户端上的“Fri Jul 23 00:30:00 UTC + 0530 2010”,以及“Thu Jul 22 12:00:00 UTC- 0700 2010“在您的EST客户端上 - 因为这两者代表相同的UTC时间。

你的服务器代码是什么样的?

+0

我已经更新了我的问题与服务器代码。我没有转换任何服务器端的日期,我只是从数据库中获取日期值并传递给客户端 – Prasad 2010-07-26 06:18:03

0

今天同样的事情发生在我身上。我正在使用sql服务器日期字段,并通过MVC将从数据库检索到的日期转换为json。我无法真正解释导致差异的原因,但我怀疑它与我的本地环境不同步的sql server 08 R2更新有关。

无论如何,我只能通过在c#代码中设置日期来修复它。我创建了一个扩展方法的易用性:

public static DateTime DateOnly(this DateTime date) 
    { 
     return new DateTime(date.Year, date.Month, date.Day); 
    } 
相关问题