【问题标题】:The best way to deal with dates in a ASP.NET MVC - Javascript application在 ASP.NET MVC 中处理日期的最佳方法 - Javascript 应用程序
【发布时间】:2012-10-19 10:46:46
【问题描述】:

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

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

这是我们想要的:

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

这里有问题:

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

    JSON Stringify changes time of date because of UTC

    这个问题有点帮助,但我们需要记住在将其发送到服务器之前更改日期。 我们还需要记住,一旦我们这样做了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)(日期偏移)

【问题讨论】:

  • JSON.stringify 不将日期转换为 UTC吗?
  • 在自己遇到这些问题后,有人问我以下问题:“您真的需要客户端上的对象本身还是只需要正确的符号?”。他在我的情况下是对的,并决定返回正确日期的字符串表示法,由正确的文化格式化。

标签: javascript asp.net-mvc json date


【解决方案1】:

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

由此得出的一般结论是您应该使用 ISO 日期:

  • 在客户端使用现代浏览器.toJSON()方法
  • 通过在服务器端正确配置 JSON 序列化(JsonNetFormatterIsoDateTimeConverter

【讨论】:

    【解决方案2】:

    可能最好的方法是将时间值发送为自 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,即一天中的毫秒数(如果一天越过夏令时更改边界,这将是一个小时)。随心所欲地处理服务器上的时间值,将其保留为数字或将其转换为日期字符串。

    【讨论】:

    猜你喜欢
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多