回前頁

JavaScript 的 Y2K 問題

網頁設計的 Y2K 問題
雖然到今日公元兩千年已過了三分之一強,Y2K 年序問題也不像 1999 年那麼受到 矚目,但 JavaScript 的日期函數,還是會在中文日期顯示上,造成不少困擾,畢竟 你不可能因為進入公元兩千年,就把所有 1999 年產生的資料都丟棄,不是嗎?
Date 物件的 getFullYear() 方法
其實 JavaScript 直譯器的設計及發展人員,早就對公元兩千年的年序顯示問題 有了預先的準備。不管是 Netscape Navigator 中的 JavaScript ,或是 Internet Explorer 的 JScript 3.0 以後的版本,都支援了 Date 日期物件的 getFullYear() 方法。getFullYear 會傳回日期物件中四位數的年序數字,所以不管 是表達西元兩千年以後的年序,或是用西元年序減去 1911 ,換算成中華民國紀元, 都不成問題。譬如本頁的中華民國紀元年份是這麼算的:
/* 西元轉中華民國紀元函式
   dobj 表傳入之日期物件 */
function TransROCFullYear(dobj)
{
    var result;
    result=dobj.getFullYear()-1911;
    return result;
}
執行結果請按這裡
舊版的 getYear() 方法
雖然 getFullYear() 已經解決了 Y2K 的年序表示問題,但早期版本瀏覽器中的 JavaScript 直譯器,並沒有支援此一日期物件的新方法,早期版本的 JavaScript 是 使用 getYear() 來傳回日期物件的年序,所以如果你考慮到像 IE 3.0 瀏覽器使用者 的瀏覽問題,你就不能使用 getFullYear() 方法,而必須使用 getYear()。
getYear() 所引起的 Y2K 問題
雖然 getYear() 是 JavaScript 共同支援的日期物件擷取年序的方法,可於新舊 瀏覽器通用,但它對年序處理方式卻會對中華民國紀元的轉換產生錯誤,這可分為: 由於 IE 和 NN 的 getYear() 對年序處理方式不同,而 IE 本身對 Y2K 之前和之後的 方式又不同,所以如果我們必須使用 getYear() 函數,那就不得不進行瀏覽器判斷了, 譬如本頁處理方式是這樣:
/* 西元轉中華民國紀元函式,dobj 表傳入之日期物件,使用 getYear() 方法。 */
function TransROCYear(dobj)
{
    var result;
    var baseYear=11;

    /* 如果瀏覽器是 IE 4.0 以上 */
    if (navigator.appName.indexOf("Microsoft")!=-1 && parseFloat(navigator.appVersion)>=4)
        /* IE 西元 2000 年以後會傳回完整的四位數年序 */
       {if(dobj.getYear()>=100) {baseYear=1911;}}

    result=dobj.getYear()-baseYear;
    return result;
}
執行結果請按 這裡

回前頁
1