雖然 getYear() 是 JavaScript 共同支援的日期物件擷取年序的方法,可於新舊
瀏覽器通用,但它對年序處理方式卻會對中華民國紀元的轉換產生錯誤,這可分為:
- 1999 年以前
不管是 IE 還是 NN 的 JavaScript 直譯器,對 1999 年以前的年序處理
,是以日期物件的西元年份減去 1900,傳回兩位數,譬如日期物件是西元
1998 年,那麼 1998-1900 ,傳回值是 98 。所以我們要把西元年份轉為
中華民國紀元,應該是 DateObject.getYear()-11。
- 2000 年以後
對於西元 2000 年以後,NN 仍然一以貫之,還是年序減去 1900 ,因此
西元 2000 年傳回值是 100 。但 IE 4.0 以後就不知是雞婆還是怎的,
西元 2000 年後 getYear() 效果和 getFullYear() 完全一樣,傳回
完整的四位數年序,因此西元轉中華民國紀元就得是
DateObject.getYear()-1911,而不能是 DateObject.getYear()-11。
由於 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;
}
執行結果請按
這裡。