5

我们的应用程序严重依赖于 javascript (jQuery)。所以有很多“应用程序/json”请求。

一段时间以来,我们一直在为日期问题苦苦挣扎,但尽管我们付出了很多努力,但我们还是无法弄清楚如何在 ASP.NET MVC 应用程序中处理它。

这是我们想要的:

  1. 在服务器端序列化/反序列化 DateTime 对象(最好使用 DateTimeKind.Utc)。
  2. 在客户端使用 Date 对象。在 UTC 中使用它。以某种方式格式化日期。

这里有问题:

  1. 日期客户端对象始终使用最终用户的时区。JSON.stringify(new Date())自动换档。

    JSON Stringify 因 UTC 而更改日期时间

    这个问题有点帮助,但我们需要记住在将其发送到服务器之前更改日期。我们还需要记住,一旦我们这样做了,我们就需要一个转变new Date('2012-10-19T10:23:47.778Z') 我们知道 JSON 不知道日期,但是如果有类似 JSON.parse 来解析日期会很好。

  2. 我们使用 Newton Json.net 来序列化/反序列化日期,但它在 DateTimeKind.Unspecified

问题:

有没有一种优雅的方式来处理服务器和客户端上的日期?我们需要它作为整个应用程序中的一个横切事物。

升级版:

我不得不说得更清楚。在我们的应用程序中,我们不需要考虑客户时区,因为我们只使用日期进行操作。

因此,如果服务器返回2012-10-19T10:23:47.778Z',我们需要 Date 对象:

Fri Oct 19 2012 10:23:47 GMT+0300 (Kaliningrad Standard Time)

不是

Fri Oct 19 2012 13:23:47 GMT+0300 (Kaliningrad Standard Time)(日期偏移)

4

2 回答 2

4

我强烈建议阅读以下帖子:

这导致您应该使用 ISO 日期的一般结论:

  • .toJSON()通过在客户端使用现代浏览器方法
  • 通过在服务器端正确配置 JSON 序列化(JsonNetFormatterwith IsoDateTimeConverter
于 2012-10-19T11:13:11.367 回答
1

可能最好的方法是将时间值发送为自 1970-01-01T00:00:00Z(即 UTC)以来的毫秒数,然后您就可以这样做new Date(timeValue),并且您的日期对象设置为该 UTC 时间。它将根据客户端系统时区设置返回日期和时间。

例如对我来说:

alert(new Date(0)); // Thu Jan 01 1970 10:00:00 GMT+1000 (EST)

如果您在客户端上弄乱了该日期对象(例如添加一天),您可以只发回时间值:

var timeValue = 1350518400000; // 2012-20-18T00:00:00Z
var date = new Date(timeValue);
alert(date);                   // 2012-10-18T10:00:00UTC+1000

// add a day
date.setDate(date.getDate() + 1); 
alert(date.getTime());         // 1350604800000

从第二个中减去第一个 timeValue,您将得到 86400000,即一天中的毫秒数(如果一天越过夏令时更改边界,这将是一个小时)。用服务器上的时间值做你喜欢的事情,将其保留为数字或将其转换为日期字符串。

于 2012-10-19T11:04:46.430 回答