代码之家  ›  专栏  ›  技术社区  ›  Dan Herbert

Javascript的日期对象是否容易受到Y2038问题的影响?

  •  11
  • Dan Herbert  · 技术社区  · 16 年前

    假设使用32位操作系统/浏览器,如果我将日期设置为2038年之后,在javascript中创建的日期对象是否可以滚动到1970年?

    这个 Mozilla documentation 说一年可以设置为9999,但是我不知道这在所有的JavaScript实现中是否一致,或者这是否是规范要求的准确描述。

    我认为考虑到文档中的措辞,它似乎要么使用64位数字来存储时间,要么使用ISO日期格式存储实际数据。

    有人知道浏览器是如何实现这一点的吗?

    1 回复  |  直到 16 年前
        1
  •  19
  •   Greg    16 年前

    不应该是-根据 ECMAScript specification 第15.9.1.1节:

    自1970年1月1日起,时间以ecmascript为单位,单位为毫秒。忽略闰秒。假设每天有86400000毫秒。ECMAScript数值可以表示“9007199254740991到9007199254740991之间的所有整数;此范围足以测量从1970年1月1日UTC开始的大约285616年内的任何瞬间的时间到毫秒精度,无论是向前还是向后。

    ECMAScript日期对象支持的实际时间范围稍小:确切地说,从1970年1月1日开始的午夜开始测量,从100000000天到100000000天。

    这使得1月1日左右的时间范围为864000000000000毫秒, 1970 UTC。1970年1月1日午夜的确切时刻,UTC用值+0表示。