標(biāo)準(zhǔn)參考
根據(jù) ECMAScript 規(guī)范附錄 B.2.4 Date.prototype.getYear() 中的描述,'getYear' 返回的是當(dāng)前年份與 1900 的差值,該方法已經(jīng)作廢,應(yīng)使用 'getFullYear' 來(lái)代替以避免“千年蟲(chóng)”問(wèn)題。
問(wèn)題描述
Date 對(duì)象的 getYear 方法在各瀏覽器下的返回值存在差異。
造成的影響
使用 Date.getYear 方法在不同的瀏覽器中將出現(xiàn)預(yù)料外的結(jié)果。
受影響的瀏覽器
所有瀏覽器
問(wèn)題分析
根據(jù)規(guī)范,這個(gè)方法將返回當(dāng)前時(shí)間的年份值與 1900 的差值,如 1800 年返回 -100,2010 返回 110。但 IE 僅在一個(gè) 1900 - 1999 年之間的日期值上調(diào)用 getYear 方法時(shí),減去 1900,在其他的日期中返回的是實(shí)際的年份,就和 getFullYear 一樣。1
在各瀏覽器中運(yùn)行以下代碼:
alert(new Date(1979,11,1).getYear());
alert(new Date(2010,2,17).getYear());
各瀏覽器下的輸出結(jié)果,如下表所示:
IE79
2010
Firefox Chrome Safari Opera79
110
可見(jiàn):不能保證 Date.prototype.getYear() 在各瀏覽器下返回相同的字符串。
注:
1. 關(guān)于 IE 下的 getYear 方法的描述,請(qǐng)參考 MSDN - getYear Method。
解決方案
要獲得一個(gè)具體時(shí)間的年份,請(qǐng)不要使用 Date.prototype.getYear() 方法,使用 Date.prototype.getFullYear() 代替,以在各瀏覽器下獲得相同的表現(xiàn)。
另外,要給一個(gè) Date 對(duì)象設(shè)置年份,也請(qǐng)不要使用 Date.prototype.setYear() 方法,使用 Date.prototype.setFullYear() 代替。
更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄