本文转自:http://www.webym.net/jiaocheng/391.html、https://blog.csdn.net/makuiyu/article/details/7606934

发现有一个之前写的网站上的年份显示不正确,本应该显示2016,却显示着116,查询对应的代码,发现是一段JavaScript代码。

这个年份是用javascript中的getYear()函数获取的,经过测试,在不同的浏览器以及切换不同的浏览模式,显示都是有区别的。在谷歌Chrome浏览器里显示不正常,IE中可以正确显示2016。

javascript 代码:<script language="JavaScript" type="text/javascript">  var isnDay = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日");  var today = new Date();  var month = today.getMonth() + 1;  document.write("" + today.getYear() + "年" + month + "月" + today.getDate() + "日" + "   " + isnDay[today.getDay()])</script>

查询资料后发现,这是因为各浏览器对getYear()处理方式的不同导致的。

那我们如何解决getYear()获取当前年份显示错误的问题呢?我教大家一个最简单的办法,将getYear换成getFullYear就可以完美解决。

下面总结下getYear、getFullYear和getUTCFullYear的不同点:

       getYear、getFullYear、getUTCFullYear都是Javascript的Date对象的方法函数。其中getYear()方法出生较早,在早期也一直使用OK,可是在2000年后这个方法问题多多,因为在Firefox和Safari等浏览器上,getYear始终返回年份与1900 年之间的差,比如1998年返回98,而2009年则会显示109,如果大家都这么处理也好,要加一起加,微软自己在IE浏览器中把getYear给修正了,可Firefox(最新版本也没修正这个问题)还蒙在鼓里,仍老老实实的按照原有规则解析getYear,本来都可以指望用户自行修正,这样一来都没得用,于是getFullYear、getUTCFullYear就出生了。

      1、getYear()函数
       使用getYear()方法可返回两位或四位数的年份,用getYear()返回的数并不一定是4位的!处于1900年和1999年间的getYear()方法返回的只有两位数。在此之前的或是在此之后的年份返回的都是四位数的,比如2009年,Javascript解析器应该是返回2009的,而浏览器则计算返回109。这应该是早期的约定,而IE埋头改掉了。该函数已经被逐渐废弃并不推荐使用。

      2、getFullYea()函数
       getFullYear函数则不存在此问题。getFullYear()方法可返回一个四位数年份,这样大家(IE和FIREFOX等)都不需要运算,直接把解析值输出来即可。

      3、getUTCFullYear()函数
       getUTCFullYear()函数则是根据UTC时间返回了四位数来代表年份。与getFullYear()方法理论角度是完全不同,虽然在大部分的时间里输出是相同的,但是假如当天日期是12月31日或1月1日,则getUTCFullYear() 返回值与getFullYear()返回值就有可能不同,具体取决于当地时区和UTC通用时间之间的关系,也就是差值。

比如在中国大陆、、香港、澳门、蒙古国、台湾、新加坡、马来西亚、菲律宾等地区的本地时间比UTC快8小时,记作UTC+8,意思就是比UTC时间快8小时。减的类似理解,比如UTC-10等。