【问题标题】:Why do different browsers return different results for JavaScript new Date(-105998400000)?为什么不同的浏览器对 JavaScript new Date(-105998400000) 返回不同的结果?
【发布时间】:2014-10-04 16:43:09
【问题描述】:

我正在使用带有默认 Json 序列化程序的 ASP.NET MVC 3(不是在 MVC4+ 中实现的 Json.NET),并且我的 JsonResults 中的日期看起来像 /Date(-105998400000)/。我正在解析数字并使用此值更新一个日期,但 IE 和 Chrome 之间的结果不一致。

var date = new Date(-105998400000);

在各种浏览器中查看my jsfiddle。我的结果是:

IE10 - 1966 年 8 月 22 日星期一 23:00:00 EST 1966
Firefox - 1966 年 8 月 23 日星期二 00:00:00 GMT-0400(美国东部标准时间)
Chrome - 1966 年 8 月 23 日星期二 00:00:00 GMT-0400(美国东部夏令时间)

我的两个客户在 Chrome 中看到了 8 月 22 日的日期。

为什么新的 Date 在不同的浏览器中返回不同的值,UTC 毫秒值?

【问题讨论】:

  • 它与时区有关,日期以本地格式显示,但 new Date(n) 采用 GMT 日期。看到 23 日的那两个客户是从西边看到 22 日吗?
  • fwiw,我在 IE(10、9 和 10)中得到的结果与在 Chrome 中的结果相同。
  • 我认为您可能是对的,这是一个时区问题。直到 2006 年,印第安纳州都没有遵守夏令时。如果有某种转换为 UTC 然后返回并且一个时区是错误的,也许这会导致一小时的差异?请注意,只有我的 Firefox 和 Chrome 结果明确记录了输出字符串中的 GMT 偏移量。
  • 您无需怀疑,它就是这样。芝加哥 22 日晚上 11 点与纽约市 23 日午夜完全相同。我不确定浏览器如何将过去的日期映射到时区或处理像印第安纳州这样的奇怪语言环境(我住在附近,它总是让我们感到困惑),但问题是表面上的,因为实际日期在所有浏览器中都报告相同的时刻.
  • @PancakeParfait DST 可能是问题,因为 IE 将时间向后返回 1 小时。

标签: javascript json asp.net-mvc-3


【解决方案1】:

我对这个问题最初实施的答案是here,使用来自 Json.NET 序列化程序的 ISO 8601 日期,而不是来自旧版 ASP.NET MVC3 Json 序列化程序的 UTC 毫秒偏移量。

感谢用户 dandavis,我确实对这个奇怪的结果有所了解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    相关资源
    最近更新 更多