【发布时间】: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
来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear:
getUTCFullYear()返回的值是一个符合 2000 年的绝对数字,例如 1995。
“符合 2000 年”是什么意思?
【问题讨论】:
标签: javascript date
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)
【讨论】:
我认为“符合 2000 年”只是意味着它不会因“Y2K 错误”而导致问题。
简单来说就是返回一个四位数字,而不是两位数字,这样不同世纪的年份之间就没有歧义了。
【讨论】:
“符合 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
【讨论】: