このページの本文へ

【NEONAGY通信特約】大丈夫? JavaScript 2000年問題

1999年12月21日 00時00分更新

文● ネオナジー

  • この記事をはてなブックマークに追加
  • 本文印刷

インターネット関連の技術ベンチャー企業、ネオナジーが、ユーザー向けに送っているメールマガジンから、“Javascriptの2000年問題”に関する記述を転載する。フェースマーク、強調符、かぎかっこなどを含め、用字用語、文体を原文のままとした。

JavaScriptは2000年対応だが、getYear関数のみ問題内包

あとほんのわずかに迫った2000年問題ですが、当然のことながらJavaScriptにも存在します。西暦2000年以降になると、Dateオブジェクトが持っている年の値を取得するメソッド「getYear()」は、Webブラウザの種類やバージョンによって異なった値を返します。これを読んで、是非ともあなたのホームページのチェックをしてみてください!!

「getYear()」は、年の下2桁の値を返すメソッドです。もしあなたのページで現在の日付や時計を表示している場合は、これを使用している可能性が高いでしょう。このメソッドが、2000年を過ぎると「100」という値を返したり、「2000」という値を返したりと、Webブラウザの種類によって異なる値を返してしまうのです!

ここで最初に言っておきたいのですが、「JavaScriptは2000年対応されている」ということです。JavaScript自体は2000年以降の日付を正確に取り扱うことが出来るのです。「getYear()」を使った表示の場合のみ、問題が起きる可能性があるのです。

下の表は、パソコンの時間を1999年、2000年に設定したときの「getYear()」が返す値です。

1999年の場合 2000年の場合
Netscape Navigator 2.X 99 100
Netscape Navigator 3.X 99 2000
Netscape Navigator 4.04 99 2000
Netscape Navigator 4.06 99 100
Netscape Navigator 4.5 99 100

Internet Explorer 3.X 99 100
Internet Explorer 4.X 99 2000
Internet Explorer 5.0 99 2000

これを見ると、Netscapeは4.04まで2000と返していたのに4.06から再び100に戻ったと思われますが、これはJavaScriptのバージョンアップ(1.1→1.2→1.3)に伴う仕様変更に忠実に従っている結果なので、せめることはできません。(^^; 現在のJavaScript1.3の仕様では、「西暦の年の値から1900を引いた値を返す。」となっています。なので2000年の場合、100が返されるわけです。

では、実際にはどうすれば良いのでしょう?

1. 2000年以降に「getYear()」の値が2000以上の場合はそのまま表示。4桁になってない場合は1900を足して、4桁にする。
  now = new Date();
  if(now.getYear() >= 2000){document.write(now.getYear(),"年")}
  else{document.write(now.getYear()+1900,"年")}
のようにすればよいでしょう。

2. JavaScript1.3からの「getFullYear()」を使う。

「getFullYear()」メソッドは4桁の年を返すメソッドです。「getYear()」の部分を「getFullYear()」に変えれば、それだけで4桁の年を返してくれます。ただし、古いバージョンのブラウザではエラーになってしまうので、注意が必要です。

2000年まであとわずか! もう一度チェックをしてみてください!

カテゴリートップへ

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン