当本地计算机和服务器在不同的时区时,Json返回不同的日期
我在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();
}
我强烈怀疑这是在你的服务器端的问题,以及误解格式化的客户端的价值。
你应该发送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时间。
你的服务器代码是什么样的?
我已经更新了我的问题与服务器代码。我没有转换任何服务器端的日期,我只是从数据库中获取日期值并传递给客户端 – Prasad 2010-07-26 06:18:03
今天同样的事情发生在我身上。我正在使用sql服务器日期字段,并通过MVC将从数据库检索到的日期转换为json。我无法真正解释导致差异的原因,但我怀疑它与我的本地环境不同步的sql server 08 R2更新有关。
无论如何,我只能通过在c#代码中设置日期来修复它。我创建了一个扩展方法的易用性:
public static DateTime DateOnly(this DateTime date)
{
return new DateTime(date.Year, date.Month, date.Day);
}
相关的问题 - http://*.com/questions/2532729/daylight-saving-time-and-timezone-best-practices – Oded 2010-07-26 19:23:39