CGI/JavaScriptの2000年問題対策について


どんな問題が発生したか


対策方法について

  • タローのページで使っているCGIプログラムには、以下の様に2つのケースがあります。いずれも対策前のプログラムでは、年を2桁として扱う様に考えられており、その変数である「$year」や「$Time[5]」には1900年からカウントした年数が2桁で代入されるものとしています。しかし、実際には1900年からカウントした年数がそのまま代入されるので。2000年になると「00年」ではなく3桁の「100年」が代入されてしまいます。
  • 対策方法は、西暦を4桁で扱う様にしました。いずれのプログラムも1行付け加えただけです。やっている事は同じで、年変数に1900を足しています。

    (1)ケース1(ゲストブックの場合)
    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
    $month = $mon + 1;
    $year = $year + 1900; <-- この行を追加!
    

    (2)ケース2(掲示板の場合)
    @Time = localtime($time);
    $Time[4]++;
    $Time[5] = 1900 + $Time[5]; <-- この行を追加!
    
    

JavaScriptでも問題発生

  • 更新履歴のページの右上に更新時刻をJavaScriptを使って表示しているのですが、年を計算している部分を以下の様に変更しました。
    var today=new Date(document.lastModified);
    var m=today.getMonth();
    var d=today.getDate();
    var y=today.getYear();
    if (y < 2000) y += 1900;                             <--追加。
    document.write("最終更新:",y,"年",m+1,"月",d,"日"); <--1900+yからyに変更。
    
    


HOWTOへもどる


Copyright (c) 2000 Hiroshi Nakamura. All rights reserved.