更新日時でNaNが表示されてしまうのを回避するには?

[上に] [前に] [次に]
Kazz [E-Mail] [HomePage] 1999/11/11(木) 15:03:53
はじめての投稿となります
JavaScript初心者です
http://www1.neweb.ne.jp/wa/kazz-h/main.html
でJavaScriptを使って更新日時を表示しているんですが
UnixのワークステーションでNC4.5を使用している知り合いから
Last Update: NaN.NaN.NaN.NaN
と表示されるとの報告がありました

原因を突き止めるために
http://www1.neweb.ne.jp/wa/kazz-h/test2.html


<SCRIPT type="text/javascript">
<!--
dt = new Date(document.lastModified);
pt = Date.parse(document.lastModified);
tt = new Date(pt);
NY = tt.getYear();
NM = tt.getMonth();
ND = tt.getDate();
NW = tt.getDay();
st = tt.toString();
document.write('RareDate:' + document.lastModified + '<BR>');
document.write('Date:' + dt + '<BR>');
document.write('Parse:' + pt + '<BR>');
document.write('newDate:' + tt + '<BR>');
document.write('toStr:' + st + '<BR>');
document.write('NYear:' + NY + '<BR>');
document.write('NMonth:' + NM + '<BR>');
document.write('NDate:' + ND + '<BR>');
document.write('NWDay:' + NW + '<BR>');
// -->
</SCRIPT>

というスクリプトを用意してテストしてもらったところ
--- ここから ---
RareDate:199911?11 01?54¬05
Date:Invalid Date
Parse:NaN
newDate:Invalid Date
toStr:Invalid Date
NYear:NaN
NMonth:NaN
NDate:NaN
NWDay:NaN
--- ここまで ---
と表示されたそうです
(ちなみに11月11日1時54分05秒に更新されたもの)

正しく更新日時を表示させるために
どのような回避手段をとればいいのかお手上げ状態です
アドバイスをお願いいたします

重油タレ流しアホトカ号 1999/11/12(金) 02:39:06
JavaScriptで最終更新時間表示って
<SCRIPT LANGUAGE="JavaScript">
<!-- To hide JavaScript from old browsers
document.write("Last updated on " + document.lastModified +".")
// end of JavaScript -->
</SCRIPT>
*出典:JavaScript小技集より
みたいなカンジじゃダメなんですか?

どうしても上みたいなクソ長いスクリプトじゃなきゃダメなんですか?

B-Cus 1999/11/12(金) 03:17:49
> RareDate:199911?11 01?54¬05
という表示を見るに、日本語 locale が設定されていて、例えば
date コマンドを実行すると
 Fri Nov 12 02:52:34 JST 1999
ではなく
 1999年11月12日 (金) 02時52分45秒 JST
と日本語表示される環境なのでしょう。当方の環境でも再現しました。

UNIX 上で
 env LANG= netscape
などと、LANG の値をクリアして起動するなどの方法で
回避できますが、いまいちな方法ですね。日本語リソースを
使っていると LANG をクリアするとメニューバーが化ける
可能性もありますし。

Javascript を知らないので、Javascript 側で対応する方法は知りません。
漢字が入っていたり日時の順番が異なっていても適当にパースしてくれる
Date.parse、getYear に相当する関数を自作することになるんでしょうか?

> みたいなカンジじゃダメなんですか?
そもそも document.lastModified をうまく取得
できないんだから、これではダメです。

Kazz 1999/11/12(金) 03:21:45
上のスクリプトは、報告を受けた人のNCの処理が
どこでどうなっているのか調べるために試しに作ってみたものです
紛らわしかったですね。失礼しました

document.write(document.lastModified);
だけだと、更新した時間、分、秒まで表示されてしまうみたいです
私は年月日と曜日だけの表示にしたかったので
http://www1.neweb.ne.jp/wa/kazz-h/main.html
では次のようにしています

<SCRIPT type="text/javascript">
<!--
var LU="Last Update: ";
dt = new Date(document.lastModified);
YY = dt.getYear();
    if(YY<1900){ YY += 1900 }
MM = dt.getMonth();
    if(MM==0){ MM = "Jan" }
    if(MM==1){ MM = "Feb" }
     (略)
    if(MM==11){ MM = "Dec" }
DD = dt.getDate();
WW = dt.getDay();
    if(WW==0){ WW = "Sun" }
    if(WW==1){ WW = "Mon" }
     (略)
    if(WW==6){ WW = "Sat" }
document.write('<DIV align="center">');
document.write('<SPAN style="color:#FF0080\; font-weight:bold">');
document.write(LU + WW + '.' + MM + '.' + DD + '.' + YY);
document.write('<\/SPAN>');
document.write('<\/DIV>');
// -->
</SCRIPT>

...って、やっぱりかなり長いですね
それに
document.write(document.lastModified);
だけでも上記の人のNCでは「?」が入ったりよくわからない記号が
一緒に表示されてしまってます
ひょっとしてNCかOS側(Unixのワークステーションだそうです)に
何か問題があったりするのでしょうか?

Kazz 1999/11/12(金) 03:30:07
上のスクリプトは、報告を受けた人のNCの処理が
どこでどうなっているのか調べるために試しに作ってみたものです
紛らわしかったですね。失礼しました

document.write(document.lastModified);
だけだと、更新した時間、分、秒まで表示されてしまうみたいです
私は年月日と曜日だけの表示にしたかったので
http://www1.neweb.ne.jp/wa/kazz-h/main.html
では次のようにしています

<SCRIPT type="text/javascript">
<!--
var LU="Last Update: ";
dt = new Date(document.lastModified);
YY = dt.getYear();
    if(YY<1900){ YY += 1900 }
MM = dt.getMonth();
    if(MM==0){ MM = "Jan" }
    if(MM==1){ MM = "Feb" }
     (略)
    if(MM==11){ MM = "Dec" }
DD = dt.getDate();
WW = dt.getDay();
    if(WW==0){ WW = "Sun" }
    if(WW==1){ WW = "Mon" }
     (略)
    if(WW==6){ WW = "Sat" }
document.write('<DIV align="center">');
document.write('<SPAN style="color:#FF0080\; font-weight:bold">');
document.write(LU + WW + '.' + MM + '.' + DD + '.' + YY);
document.write('<\/SPAN>');
document.write('<\/DIV>');
// -->
</SCRIPT>

...って、やっぱりかなり長いですね
それに
document.write(document.lastModified);
だけでも上記の人のNCでは「?」が入ったりよくわからない記号が
一緒に表示されてしまってます
ひょっとしてNCかOS側(Unixのワークステーションだそうです)に
何か問題があったりするのでしょうか?

Kazz 1999/11/12(金) 03:50:45
うっかり更新ボタンを押して2度送信しちゃいました。失礼

>  1999年11月12日 (金) 02時52分45秒 JST
> と日本語表示される環境なのでしょう。当方の環境でも再現しました。

なるほど、そういうことなんですか
妙な記号がでた理由も納得がいきました

> 漢字が入っていたり日時の順番が異なっていても適当にパースしてくれる
> Date.parse、getYear に相当する関数を自作することになるんでしょうか?

自作...ですか。ちょっと挑戦してみます
参考までに教えていたけると助かるのですが、
B-Cusさんの環境でも
document.write(document.lastModified);
とやった場合には
199911?11 01?54¬05
と同様の形で表示されたのでしょうか?

情報ありがとうございました>重油タレ流しアホトカ号さん、B-Cusさん

B-Cus 1999/11/12(金) 04:02:32
 - 日本語locale のない環境 (dateコマンドで日本語が表示されない環境) では正しい表示
 - 日本語locale のある環境 (dateコマンドで日本語が表示される環境) では化けた表示
 - 日本語locale のある環境 (dateコマンドで日本語が表示される環境) で、LANG を
   クリアしたら正しい表示
でした。ですから、UNIX だから、ワークステーションだから、というだけで
化けるわけではないです。

なお、ここでいう「化けた表示」というのは
> 199911?11 01?54¬05
のような表示のことです。

根本的には、locale を参照してしまうブラウザのバグかなぁ?

Kazz 1999/11/12(金) 05:35:02
[[解決]]
わざわざチェックまでしていただきありがとうございます>B-Cusさん

おかげさまで、かなり強引ですが、表示させる方法も、
なんとなくアイディアが思いつきました
(プログラム組んでいる人が見たら卒倒するかも...)
うまくいくかどうか、あとは本人と確認しながら進めてみます

お世話になりました

Kazz 1999/11/12(金) 15:46:35
おかげさまで解決しました

> 1999年11月12日 (金) 02時52分45秒 JST
という情報を元に下のようなスクリプトを書いたら
ちゃんと表示されるようになりました
残念ながら曜日は取得できないですが...

<SCRIPT type="text/javascript">
<!--
var LU="Last Update: ";
dt = new Date(document.lastModified);
YY = dt.getYear();
    if(YY<1900){ YY += 1900 }
MM = dt.getMonth();
    if(MM==0){ MM = "Jan" }
          (略)
    if(MM==11){ MM = "Dec" }
DD = dt.getDate();
WW = dt.getDay();
    if(WW==0){ WW = "Sun" }
          (略)
    if(WW==6){ WW = "Sat" }
// ここから回避用
if(isNaN(YY) == true){
st = new String(document.lastModified);
NY = st.substr(0,4);
NM = st.substr(6,2);
    if(NM=="01"){ NM = "Jan" }
            (略)
    if(NM=="12"){ NM = "Dec" }
ND = st.substr(10,2);
document.write(LU + NM + '.' + ND + '.' + NY);
}else{  // 元に戻る
document.write(LU + WW + '.' + MM + '.' + DD + '.' + YY);
}
// -->
</SCRIPT>

どうもありがとうございました

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