[1535]  JAVA Sucriptの年処理について(2000年問題にぶち当たりました)
投稿者: さん   2000-02-03 21:22:57
HTMLの中にこんなScriptが含まれています。<script language="JavaScript">
<!-- To hide JavaScript from old browsers
update = new Date(document.lastModified)
theMonth = update.getMonth() + 1
theDate = update.getDate()
//theYear = update.getYear()
theYear = update.getFullYear()
document.writeln("<I>最終更新日: " + theYear + "年" + theMonth + "月" +theDate + "日 </I>")
// end of JavaScript -->
</script>

これによりサーバにUPした年月日が左上に表示されるのですがIE4は1900年になってしまいます。
IE5やネスケ4.7ではちゃんと2000年と表示されています。
ブラウザのバージョンのチェック方法とIE4だったら+100年するというScriptは書けるでしょうか?
よろしくお願いします。
  1. YU さん   2000-02-03 21:37:25
    theYear = update.getFullYear() % 100 + 2000

    で、どうでしょう。
    このプログラムだと2100年問題が発生する可能性がありますが、あと約100年間は大丈夫のはずです。
  2. さん   2000-02-04 00:08:15
    YUさんの下にかかれていた方の修正パッチで直るんですね。
    #消えていますね。

    http://www.microsoft.com/windows/ie_intl/ja/security/mshtmldll.htm

    をかいてくれた方、YUさんありがとうございます。
  3. まっちゃん さん   2000-02-04 08:58:14
    申し訳ないです。削除してしまいました。
    文面からすると、JavaScriptの記述の仕方についてだったもので。m(__)m

  4. Pop さん   2000-02-04 09:01:46
    getYear()は1900年からの経過年数になっているはずなので、
    theYear = update.getYear() + 1900
    としましょう。
  5. まっちゃん さん   2000-02-04 11:14:53
    ↑のお詫びではないですが。(^^;;
    MSサポート情報に掲載があったと思うので、検索してみました。

    『[IE4]Document.lastModifiedが無効な日付を返す』
    http://www.microsoft.com/japan/support/kb/articles/J052/2/11.htm
  6. YU さん   2000-02-04 16:27:46
    Popさんの書き方だと、逆にIE5やネスケ4で3900年になってしまいます。
    また、そのページを見に来た人全員がIE4をアップデートしているとは限らないので、やはりJAVA Script側でなんとかするしかないと思います。
  7. さん   2000-02-04 21:18:32
    >theYear = update.getFullYear() % 100 + 2000
    これはどういった処理を行っているのでしょうか?
    #自宅はWINDOWS2000とWINDOWS98SEなので確認がとれません。

    まっちゃんさん>ありがとうございます。

  8. Selly さん   2000-02-05 03:35:49
    > >theYear = update.getFullYear() % 100 + 2000
    > これはどういった処理を行っているのでしょうか?

    西暦を100で割った余りに2000を足しています。
    つまり、2100年になると…
  9. Selly さん   2000-02-05 04:06:58
    > getYear()は1900年からの経過年数になっているはずなので、

    そうとは限りません。
    ブラウザによっては1999年までは1900年からの経過年数(西暦下2ケタかも)を返し、2000年以降は4桁で西暦を返します。
    よって、getYear()の返値が100未満の場合のみ1900を加えるという処理が必要です。
  10. YU さん   2000-02-05 14:15:23
    個人のホームページで100年先のことまで考慮する必要はまったくないと思うので、2100年問題ありのスクリプトでいいんじゃないでしょうか。
    あと、1999年以前の年が表示される可能性があるのなら、もう少し工夫が必要になりますが、2000年以降しか表示されないとわかっているなら、単純に下2ケタに2000を足す方法でいいと思います。
    厳密にやるなら、100未満、1900未満、1900以上2000未満、2000以上に場合分けする処理が必要になってきます。
  11. Yos. さん   2000-02-06 00:54:24
    > ブラウザによっては1999年までは1900年からの経過年数(西暦下2ケタかも)を返し、
    > 2000年以降は4桁で西暦を返します。

    getYear の仕様(←あって無いようなもの?)としては、98、99、2000、2001・・・で良かったような気もしますが・・・。勘違いかな?

    > 厳密にやるなら、100未満、1900未満、1900以上2000未満、2000以上に
    > 場合分けする処理が必要になってきます。

    はぁい、やってますぅ。ブラウザのバージョン調べて場合分けしようと思ったら、例によってお行儀の悪い IE の 5 (w2k付属のだけかも?) が「わしゃ IE4じゃ(謎)」って嘘ついてきたので、仕方なく「getYear で返ってきた値」で場合分けしました。Netscape の方は真面目に 98、99、2000、2001・・・と返してくるようですね。
    しかし、全然上位互換じゃないくせに compatible だなんて嘘つくなよなぁ。(--;>IE5
  12. Selly さん   2000-02-06 04:09:04
    > getYear の仕様(←あって無いようなもの?)としては、

    MSDN Library CD July 1999 JScriptランゲージリファレンスより引用
    > getYear メソッドでは、Date オブジェクトに格納されている年と 1900 年との差を表す "年" を 2 桁の整数値として返します。たとえば、Date オブジェクトに格納されている年が 1996 年の場合は、年数を 96 で返し、2025 年の場合は、125 で返します。

    Microsoftがソフトウェア開発者に提供してる公式資料でもこのザマなので当てにしない方がいいですね<仕様

    ところで、lastModifiedの値はそのまま表示した方がいいのでは?
    UAによってフォーマットが違うわ、Y2Kがあるわ、あげくに9時間ずれてたり…
    Webサイト作成系のサイトでlastModifiedのフォーマットの調査をしていた場所がありましたが、どのUAでも同じように動作させるのはまず無理という結論だったと思います。