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