各浏览器中 Date 对象的 getYear 方法的返回值不一致
2015-03-18来源:易贤网

标准参考

根据 ECMAScript 规范附录 B.2.4 Date.prototype.getYear() 中的描述,'getYear' 返回的是当前年份与 1900 的差值,该方法已经作废,应使用 'getFullYear' 来代替以避免“千年虫”问题。

问题描述

Date 对象的 getYear 方法在各浏览器下的返回值存在差异。

造成的影响

使用 Date.getYear 方法在不同的浏览器中将出现预料外的结果。

受影响的浏览器

所有浏览器

问题分析

根据规范,这个方法将返回当前时间的年份值与 1900 的差值,如 1800 年返回 -100,2010 返回 110。但 IE 仅在一个 1900 - 1999 年之间的日期值上调用 getYear 方法时,减去 1900,在其他的日期中返回的是实际的年份,就和 getFullYear 一样。1

在各浏览器中运行以下代码:

alert(new Date(1979,11,1).getYear());

alert(new Date(2010,2,17).getYear());

各浏览器下的输出结果,如下表所示:

IE79

2010

Firefox Chrome Safari Opera79

110

可见:不能保证 Date.prototype.getYear() 在各浏览器下返回相同的字符串。

注:

1. 关于 IE 下的 getYear 方法的描述,请参考 MSDN - getYear Method。

解决方案

要获得一个具体时间的年份,请不要使用 Date.prototype.getYear() 方法,使用 Date.prototype.getFullYear() 代替,以在各浏览器下获得相同的表现。

另外,要给一个 Date 对象设置年份,也请不要使用 Date.prototype.setYear() 方法,使用 Date.prototype.setFullYear() 代替。

更多信息请查看IT技术专栏

2025公考·省考培训课程试听预约报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
推荐信息