ページに関するTips


・最終更新日

NN2Unknown NN3Bug NN4Bug MozillaBug IE3Bug IE4Bug

ホームページを見る人にとって、そのページの更新日は重要な情報になります。 然し、ページを更新する度に最終更新日を忘れずに修正することは結構難しい 問題です。

更新日の種類には

  1. そのページが修正された日付
  2. そのページを頂点とする全体のドキュメントが修正された日付

が考えられます。

そのページが修正された日付を更新日にする場合は JavaScript を使用すれば簡単に自動化できます。


サンプル

最終更新日をJavaScript で自動化する(最も簡単な例)
<script language="JavaScript"><!--
document.writeln(
  'last updated on : '+document.lastModified
);
// --></script>
<noscript>last updated on:04/01/97 23:30:44</noscript>

ちょっと複雑になりますが、更新日のフォーマットを変えることもできます。


// ブラウザ情報の設定
ie =(navigator.appName=='Microsoft Internet Explorer');
nn =(navigator.appName=='Netscape');
mac=(navigator.appVersion.indexOf('Mac')!=-1);
ver=parseInt(navigator.appVersion);
if(ie && ver==4)
  ver = parseInt(
          navigator.appVersion.substring
            (navigator.appVersion.indexOf('MSIE ')+5)
          );

// 曜日の配列を作る
week = new Week();
function Week(){
  var i=0;
  this[i++]='Sun'; this[i++]='Mon'; this[i++]='Tue';
  this[i++]='Wed'; this[i++]='Thu'; this[i++]='Fri';
  this[i++]='Sat';
}

// 最終更新日の日付を算出する
function updateDate(){
  var lm = document.lastModified;
  var lmDate;

  if(ie && ver<4){
    // IE4 より前のブラウザは parse できない
    var i,j,nm;
    i=lm.indexOf(' ',0); j=lm.indexOf(' ',i+1);
    nm ='' +lm.substring(i+1,j);
    i=lm.indexOf(' ',j); j=lm.indexOf(' ',i+1);
    nm+='/'+lm.substring(i+1,j);
    i=lm.indexOf(' ',j); j=lm.indexOf(' ',i+1);
    nm+='/'+lm.substring(j+1,lm.length)
       +' '+lm.substring(i+1,j);
    lmDate = new Date(Date.parse(nm));
  } else {
    var p,pd=Date.parse(document.lastModified);
    if(!pd && (p=document.lastModified.indexOf(' JST'))!=-1){
    // Linux版 NN4 では 'JST' 付きの文字列は parse できない
      pd=Date.parse(document.lastModified.substring(0,p));
    }
    lmDate = new Date(pd);
  }
  // 年号は getFullYear メソッドがあれば、これを使用する
  var y=lmDate.getFullYear?
          lmDate.getFullYear():lmDate.getYear();
  // Y2K問題の補正をする
  var oy=y;
  if(y< 100) y+=1900;
  if(y<1980) y+= 100;
  if(oy!=y) lmDate.setYear(y);
  if(ie && ver<5 && navigator.appVersion.indexOf('MSIE 5')==-1){
    // IE4以前のブラウザは地域化の考慮が欠けているので補正する
    lmDate.setTime(
      lmDate.getTime()-lmDate.getTimezoneOffset()*60*1000);
  }
  else if(mac && !ie && ver==4){
    // Mac版 NN4も地域化の考慮が欠けているので補正する
    // 但し、getTimezoneOffset の戻り値のフォーマットが異なる!
    var tz=lmDate.getTimezoneOffset();
    lmDate.setTime(
      lmDate.getTime()+(parseInt(tz/100)*60+tz%100)*60*1000);
  }
  // 算出した最終更新日を文字列に成形して戻す
  return (lmDate.getMonth()+1)+'/'+lmDate.getDate()
        +'('+week[lmDate.getDay()]+'), '+y;
}
// 最終更新日を出力する
document.write('最終更新日:'+updateDate());
見本:

出力する形式を変更するには、 この文字の部分を適当に修正します

lastModified の出力を成形するのに、 これ程複雑になるのは各ブラウザがプラットフォームやバージョン毎に lastModified の形式や Date.parse() メソッドの解釈ルールが異なったり、 それらを補正するために Y2K問題 を考慮する必要があるためです。

現在では最終更新日が 2000年より前になることはないので この文字の部分 はもう少し簡単にすることができます。
( と言っても省略できるわけではないので紹介はしません )

もし、SSI や CGI をサポートしている環境なら、それらを使用して成形する方が遙かに楽でしょう。
( 詳細は JavaScript の範囲外になりますので省略します )


注意事項

Caution3
色々なブラウザ、バージョン、OSなどの判定方法は DevEdge Online に 「The Ultimate JavaScript Client Sniffer」(英語)という項目で 紹介されていますので必要と興味のある方は参考にして下さい。

NN3 NN4 IE3 IE4
ページを表示した後で他のページに移り、その後前のページに戻ったりすると、 時々 lastModified の値がなくなる( 基準日の日付になる )ことがあります。
Mozilla
「最も簡単な例」にある document.lastModified をそのまま文字列に変換すると GMT 表記になるようです( このプロパティは W3C DOM で規定されていないものなので 仕様かどうかは不明です )。

Copyright(c) 1998 - 2000 ShinSoft. All rights reserved.