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.
|
|