处理ASP.NET MVC中日期的最佳方法 - Javascript应用程序

5 javascript asp.net-mvc json date

我们的应用程序依赖于javascript(jQuery).所以有很多'application/json'请求.

我们一直在与日期挣扎一段时间,但尽管我们付出了努力,但我们无法弄清楚如何在ASP.NET MVC应用程序中处理它.

这就是我们想要的:

  1. 在服务器端序列化/反序列化DateTime对象(最好使用DateTimeKind.Utc).
  2. 在客户端使用Date对象.在UTC中使用它.格式化日期不知何故.

这是问题:

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

    由于UTC,JSON Stringify更改日期时间

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

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

题:

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

UPD:

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

所以如果服务器返回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) (日期转移)

Rob*_*obG 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)
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

从第二个 timeValue 中减去第一个 timeValue,您将得到 86400000,这是一天中的毫秒数(如果这一天跨越夏令时更改边界,则无论哪种方式都将是一个小时)。在服务器上对时间值进行您喜欢的操作,将其保留为数字或将其转换为日期字符串。