各瀏覽器中 Date 對(duì)象的 getYear 方法的返回值不一致

字號(hào):


    標(biāo)準(zhǔn)參考
    根據(jù) ECMAScript 規(guī)范附錄 B.2.4 Date.prototype.getYear() 中的描述,'getYear' 返回的是當(dāng)前年份與 1900 的差值,該方法已經(jīng)作廢,應(yīng)使用 'getFullYear' 來代替以避免“千年蟲”問題。
    問題描述
    Date 對(duì)象的 getYear 方法在各瀏覽器下的返回值存在差異。
    造成的影響
    使用 Date.getYear 方法在不同的瀏覽器中將出現(xiàn)預(yù)料外的結(jié)果。
    受影響的瀏覽器
    所有瀏覽器
    問題分析
    根據(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
    可見:不能保證 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() 代替。