JavaScriptの2000年問題

 まず、これを読まれているのが2000年より前なら、システムの日付を2000年以降に変更してこのページをリロードしてみてください(注・システムの状態によっては障害が発生する可能性もあるので、重要なシステムでは止めた方が無難です。特に、学校など公共のマシンでは絶対にやらないでください)。

、いかがでしょうか? IE4/5などでは年数が3900などとなったと思います。つまり、2000年を境に「コンピュータが日付を間違えて誤作動する」2000年問題が発生したわけです。日付の部分は、以下のようなスクリプトで出力しました。どこが問題なのでしょうか?

  d=new Date();
  document.write("今日は"+(d.getYear()+1900)+"/"+(d.getMonth()+1)+"/"+d.getDate());

 問題になるのは、d.getYear()+1900+1900です。JavaScriptのgetYear()は、1999年までは年数−1900を返すのですが、2000年以降は実際の年数を返すものと引き続き年数−1900を返すもの、と実行環境で結果が違ってきます。IE4/5は、2000年以降実際の年数を返すために1900を足すと年数が狂う、というわけです。

 対策としては、年数を4桁で返すgetFullYear()を使うか(環境によっては未対応)、getYear()が返す値が2000未満の時にだけ1900を足すようにする、という処理(トップページの「今回アクセス」もこの方式)が考えられます。
 下の例は、getFullYear()を使ってみました。今度は(対応ブラウザなら)ちゃんと表示されますね。

・getFullYear()スクリプト例

  d=new Date();
  document.write("今日は"+d.getFullYear()+"/"+(d.getMonth()+1)+"/"+d.getDate());

 表示を確認したら、日付を元に戻しておきましょう。

戻る