getYear()に潜む2000年問題

とほほのWWW入門 > とほほのJavaScript入門 > getYear()に潜む2000年問題
1999年12月12日初版、2000年1月3日改版

はじめに

JavaScriptのgetYear()メソッドに関する2000年問題について、以前にも一度紹介したことがあるのですが、2000年が近づいてきたのでもう一度紹介しておきます。

getYear()の2000年問題とは?

getYear()を使用している人の何割かは次のようなスクリプトを書いていると思います。

dd = new Date();
year = 1900 + dd.getYear();

しかし、このスクリプトは2000年問題を引き起こします。Internet Explorer 3.0 や、Netscape Navigator 2.0 では上記のスクリプトで問題無かったのですが、Netscape Navigator 3.0 および、それを引き継いだ Internet Explorer 4.0 で、大きな仕様変更が行われました。

NN2.0/IE3.0: getYear()は、常に1900年からの差分を返します。
  1999年 → 99
  2000年 → 100

NN3.0/NN4.0/IE4.0/IE5.0: getYear()は、1999年までは1900年からの差分、2000年以降は西暦をそのまま返します。
  1999年 → 99
  2000年 → 2000

しかし、この仕様変更がよほど不評だったのか、NN4.5(おそらくNN4.06も)では、再度、仕様を元に戻しているようです。

NN4.06/NN4.5: getYear()は、常に1900年からの差分を返します。

という訳で、上記のようなスクリプトをNN4.0やIE5.0で2000年に動かすと、1900 + 2000 で 3900年だと計算してしまいます。

解決策は?

getFullYear()は常に4桁の西暦(10000年を超えると5桁ですが)を返してくれるので扱いやすいですが、Internet Explorer 3.0やNetscape Navigator 2.0はこのメソッドをサポートしていません。これらのブラウザが完全に無くなる(せめて1.0%以下の使用率になる)まで、getFullYear()の使用は控えるべきでしょう。

したがって、4桁の西暦を求めるには、次のようにすることをオススメします。

dd = new Date();
year = dd.getYear();
if (year < 2000) { year += 1900; }


Copyright (C) 1999-2000 とほほ
http://wakusei.cplaza.ne.jp/twn/wwwjsz03.htm