【问题标题】:How is Date.prototype.getUTCFullYear() compliant with year-2000?Date.prototype.getUTCFullYear() 如何与 2000 年兼容?
【发布时间】:2017-06-02 17:11:08
【问题描述】:

来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear

getUTCFullYear() 返回的值是一个符合 2000 年的绝对数字,例如 1995。

“符合 2000 年”是什么意思?

【问题讨论】:

标签: javascript date


【解决方案1】:
The value returned by getUTCFullYear() is an absolute number that is compliant with year-2000, for example, 1995.

这句话的意思是数字必须是正数,不能为0,而且必须写为inter(符合2000年,例如1998,1999,2000,NO 98,99,00)

【讨论】:

    【解决方案2】:

    我认为“符合 2000 年”只是意味着它不会因“Y2K 错误”而导致问题。

    简单来说就是返回一个四位数字,而不是两位数字,这样不同世纪的年份之间就没有歧义了。

    【讨论】:

      【解决方案3】:

      符合 2000 年”这句话有点误导,可能应该删除。

      最初,ECMAScript 是使用名为 getYear 的类似 Java 的方法实现的,该方法返回一个 2 位数的年份,即全年 - 1900,因此 1995 返回为 95,2017 返回为 117,1832 返回为 -68。此方法现已移至 appendix of ECMA-262,仅适用于 Web 浏览器,并且出于向后兼容性的原因进行维护,不应在新代码中使用它。

      虽然 getYear 方法现在看起来有点奇怪,但它很容易通过添加 1900 转换为一整年。

      “Y2K”问题是 2 位数年份在 2000 年 1 月 1 日之后成为问题,因为像 2000 年 1 月 1 日这样的日期会在 2000 年 1 月 1 日被解释为 1900 年 1 月 1 日(依此类推对于任何 2 位数年份)。这个问题仍然存在,因为 new Date(0,0,1) 创建的日期是 1900 年 1 月 1 日,而不是 0000 年 1 月 1 日。

      这是真正的 2000 年 (Y2K) 问题,而不是年份。

      要创建介于 -99 和 +99 之间的日期,您需要设置全年,例如对于 23 年 1 月 1 日,您需要执行以下操作:

      var d = new Date();
      d.setFullYear(23,0,1);
      

      关于getFullYear(和getUTCFullYear),它返回全年,可以是从 1970 年起大约 ±285,616 的任何年份。它本身并没有避免千年虫问题。但它会返回实际年份:

      var d = new Date();
      d.setFullYear(23, 0, 1);
      console.log(d.getYear());     // -1877
      console.log(d.getFullYear()); // 23

      【讨论】:

        猜你喜欢
        • 2012-09-06
        • 1970-01-01
        • 1970-01-01
        • 2013-07-20
        • 2019-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-04
        相关资源
        最近更新 更多