当本地机器和服务器在不同的时区时,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 

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

服务器代码是[编辑]:

 public JsonResult GetregisteredUsersJSON() { var usersList = this.GetregisteredUsers() return Json(usersList, JsonRequestBehavior.AllowGet); } private List 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构造函数时只需要一毫秒的值,这意味着自1970年1月1日UTC以来的毫秒数。

假设您的价值是1900 UTC,您应该在您的IST客户端上看到“Fri Jul 23 00:30:00 UTC + 0530 2010”,并在您的EST上看到“Thu Jul 22 12:00:00 UTC-0700 2010”客户端 – 因为这两者代表相同的UTC时间。

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

我今天也发生了同样的事情。 我正在使用sql server date字段,只是通过MVC将从DB检索到的日期转换为json。 我无法解释造成这种差异的原因,但我怀疑它与sql server 08 R2更新有关,这些更新与我的本地环境不同步。

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

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