Netscape Navigator 4.04 JavaScript の2000年問題

[上に] [前に] [次に]
まにあくす 2000/01/11(火) 14:34:25
Netscape(R) Navigator 4.04において
JavaScriptでgetyearをすると
値が0で帰ってきます。
ほかの仕様とも比較して、どう対処すればよいか分かりません。
回避法をご教授ください

無責任官庁 2000/01/11(火) 14:48:24
こちらを参照。
http://www.tohoho-web.com/wwwjsz03.htm

0が返るってのは、プログラムのミスでは?
私の所では2000が返ります。

まにあくす 2000/01/11(火) 15:38:10
dd = new Date(document.lastModified);
year = dd.getYear();
のときでした。
どうしてでしょうか?

capitaine 2000/01/11(火) 16:16:22
それを dd = new Date() とすると、多分 100 になるんじゃないかと
思うんですが、何からgetYearするかで、100 になったり 0 だったりと
違うようです。
場合に合わせて 2000 になるよう数字を加えてやるといいですね。

ma3ki 2000/01/11(火) 18:43:19
Netscape Navigator 4.04 JavaScript の2000年問題-
私が、行った解決策を参考になればと思い、投稿します。
まず、
1.date=new Date(document.lastModified);と
2.date=new Date();では、
getYear()の返す値が、異なることに気が付きました。
2では、NNとIE4以下では1999年までは−差分
       IE5以上−2000
1では、0を返すブラウザがあります。

従い、私は最終更新日の表示で以下のようにしました。

<SCRIPT LANGUAGE="JavaScript">
<!--

var md = new Date(document.lastModified);
var ywk = md.getYear();
if ((md.getYear() <= 99) && (md.getYear() >= 0 )){
                  ywk =  md.getYear() + 2000
          };
if ((md.getYear() <= 1999) && (md.getYear() >= 100)){
                  ywk =  md.getYear() + 1900
          };
var Lupymd = '<font size=3>最終更新日:' + ywk.toString()
+ '.' + (md.getMonth()+1).toString() + '.'
+  (md.getDate()).toString() + '</font>';
document.write(Lupymd);
//--最終更新日自動表示2000.1.5-->

ma3ki 2000/01/05(水) 11:19:45
自動更新日を正しく表示するには-
私が、行った解決策を参考になればと思い、投稿します。
まず、
1.date=new Date(document.lastModified);と
2.date=new Date();では、
getYear()の返す値が、異なることに気が付きました。
2では、NNとIE4以下では1999年までは−差分
       IE5以上−2000
1では、0を返すブラウザがあります。

従い、私は以下のようにしました。

<SCRIPT LANGUAGE="JavaScript">
<!--

var md = new Date(document.lastModified);
var ywk = md.getYear();
if ((md.getYear() <= 99) && (md.getYear() >= 0 )){
                  ywk =  md.getYear() + 2000
          };
if ((md.getYear() <= 1999) && (md.getYear() >= 100)){
                  ywk =  md.getYear() + 1900
          };
var Lupymd = '<font size=3>最終更新日:' + ywk.toString()
+ '.' + (md.getMonth()+1).toString() + '.'
+  (md.getDate()).toString() + '</font>';
document.write(Lupymd);
//--最終更新日自動表示2000.1.5-->

capitaine 2000/01/12(水) 07:17:37
やはり同じ場所で同じ症状が出ていますね。

上でma3kiさんが書かれたのは要するに、getYear()が 100未満を
返した場合1900を、100以上でかつ4桁未満の場合に2000を加える
ものですね。わしも一時採用してました。

でも、こちらのほうが簡単ですよ(変数は引用)。

ywk = md.getYear();
if(ywk < 2000)ywk = ywk % 100 + 2000;

--------
”if(ywk < 2000)”も、特に必要ないかも?
次の1行でも十分ですね。

ywk = md.getYear() % 100 + 2000;

まにあくす 2000/01/12(水) 10:04:18
それだと2100年問題が起こる・・・?

Kazz [E-Mail] [HomePage] 2000/01/12(水) 14:27:08
私のサイトでも同じ問題に遭遇しました
IE4.0やNC4.5以下(NC4.6は未確認)でこの現象を確認しています
IE5.0並びにNC4.7では発生していません

現象を調べたところ
dd = new Date(document.lastModified);では
IE4.0、NC4.5ともに
(1)getYear();で「0」を返している
(2)getTime();ではマイナスの値
(3)曜日が違う(1900年における当該月日の曜日になっている)
個別の現象としては
(4)NCでは「年」「曜日」以外の「月」「日」「時」「分」「秒」は
100年後の(正しい)更新日時ととりあえず同じ値になっているものの
IEでは-9時間ずれる

これらをふまえ以下のスクリプトに変更してみたところ
IE4.0、5.0 NC4.5、4.7のいずれも
とりあえず正しく更新日時が表示されるようになりました
(IE3.0、NN3.0では別のエラーが出てたので何も表示させてません)
----
<SCRIPT type="text/javascript">
<!--
if(navigator.appVersion.charAt(0) >= 4){
dd = new Date(document.lastModified);
YY = dd.getYear();
if(YY >=100 && YY < 1900){             // NC4.7用
YY += 1900
}else if(YY >=0 && YY < 100){          // NC4.5以下とIE4.0用
TT = dd.getTime();
if(navigator.appName.charAt(0) == "M"){ TT += 32400000 }
// IEならばあらかじめ9時間(ミリ秒単位)足す
dd.setTime(TT + 3155673600000);
// 100年間の差分(ミリ秒単位)を足す
YY = dd.getYear();
if(YY >=100 && YY < 1900){ YY += 1900}
}else{                                 // IE5.0用
YY = YY
}
MM = dd.getMonth();
if(MM==0){ MM = "Jan" }
// (中略)
if(MM==11){ MM = "Dec" }

DD = dd.getDate();

WW = dd.getDay();
if(WW==0){ WW = "Sun" }
// (中略)
if(WW==6){ WW = "Sat" }

document.write('Last Update: ' + WW + '.' + MM + '.' + DD + '.' + YY);
}
// -->
</SCRIPT>

ma3ki 2000/01/12(水) 15:47:19
ますます、頭が混乱してきました。
とりあえず、今から99年間は、capitaine 2000/01/12(水) 07:17:37
さんの仕様で大丈夫と思いますが、ここでなぜgetYearは、0を返すのでしょうか?
2000の下2桁を返えしているのか、それともバグなのかが分からない。
もし、2100年で100を返すのなら、capitaine の仕様で大丈夫。

Kazz 2000/01/12(水) 16:40:45
> とりあえず、今から99年間は、capitaine 2000/01/12(水) 07:17:37
> さんの仕様で大丈夫と思いますが、ここでなぜgetYearは、0を返すのでしょうか?

なぜ0を返すのかはわかりませんが
上記のcaptaineさんの方法だと
更新日の日付情報は1900年のまま、表示だけ2000年にしているので
2/29に3/1と表示されてしまうと思いますけど
#1900年は閏年じゃないので

Kazz 2000/01/12(水) 16:42:41
> 上記のcaptaineさんの方法だと

capitaineさんでした。大変失礼しました

capitaine 2000/01/12(水) 18:49:34
はは、ハンドル訂正は不要です。ややこしくてすみません。

ああ確かに、2/29も Y2K問題でした。そういう情報として
判ってても気づきませんでした。
ということは、0年を返すような値を使っている限りは どの
方法でも同じ、29日が来れば3月になるってことになりますね。
それ以前、その日を待たずに、今でも曜日が違ってるわけか。

となると、100未満の場合は、100年分の時間を足すしかない
かな? 上のがその方法ですね?
ところで IEの問題については、前からありましたよね。

どうして更新日付だけ1900年になるのかについては、そういう
仕様になっていると理解するしかないんじゃないでしょうか。

とほほ 2000/01/13(木) 01:42:07
この問題を整理するために、まず、
 ・lastModified がどのような形式の文字列を返すのか
 ・それはOSには依存しないのか
 ・それをDate()で解釈すると、どのように解釈されるのか
 ・Date()で解釈したものを補正するのと、lastModifiedの文字列を
  補正したものをDate()で解釈するのと、どちらがよいのか
を整理してみたいと思うのですが、よろしければ、
  ../200001/00010185.htm
に情報をお寄せください。

[上に] [前に] [次に]