0

我在 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<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();
}
4

3 回答 3

2

如果您将数据保存在数据库中而不指定它是 UTC,那么您将希望 JsonResult 在序列化期间不转换 DateTime。为此,您需要使用 ActionResult 而不是 JsonResult,然后将 Json 数据序列化,并将 JsonSerializerSettings 设置为 Unspecified。

public ActionResult GetregisteredUsersJSON() { var usersList = this.GetregisteredUsers() return Content(JsonConvert.SerializeObject(usersList, new JsonSerializerSettings{DateTimeZoneHandling = DateTimeZoneHandling.Unspecified })); }

于 2020-05-06T01:29:00.007 回答
1

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

您应该发送 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 时间。

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

于 2010-07-26T06:04:47.873 回答
0

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

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

    public static DateTime DateOnly(this DateTime date)
    {
        return new DateTime(date.Year, date.Month, date.Day);
    }
于 2012-04-20T17:11:44.847 回答