2

我有一个 ASP.NET WEB.API 4 和一个返回以下 json 的控制器:

{   date: "2013-03-14T00:00:00"   }

我在客户端(JavaScript)上解析它:

date = new Date(json.date); // json.date being "2013-03-14T00:00:00"

后来我做了一个 POST 并且在正文中日期已更改为

{   date: "2013-03-13T23:00:00.000Z"   }

我的猜测是 JavaScript 或浏览器添加了一些时区内容?

由于数据库将日期存储为 int (yyyymmdd),因此我进行了以下转换:

public static int ToInt(DateTime date)
{
    return date.Year * 10000 + date.Month * 100 + date.Day;
}

然后得到的 int 休息一天 :(

但是,如果我这样做

date.ToLocalTime()

在调用 ToInt 方法之前,它看起来不错。

我是否正确理解了这一点并且 ToLocalTime() 是一个足够的解决方案,还是我需要花一天时间阅读 .NET 和 JavaScript 中的 UTC 日期?

谢谢!

4

2 回答 2

1
date = new Date(json.date); // json.date being "2013-03-14T00:00:00"

那是哪个时区json.date?如果没有关于此的信息,JSDate构造函数将假定它是客户端的本地时区(这是非常随机的)。如果您希望它是 UTC,只需"Z"在您的 ISO 日期字符串之后添加:

date = new Date(json.date+"Z");

也总是使用这些[gs]etUTC(FullYear|Month|Date|…)方法。

于 2013-04-06T15:35:24.530 回答
1

在我看来,如果您的控制器将以 ZULU 格式返回日期,您将获得更好的结果。所以在发送之前使用: ToUniversalTime ( http://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.aspx ) 结果也将是 ZULU 格式,所以你不必转换它到本地时间

于 2013-04-06T14:09:54.810 回答