1. としきのやしき正門
  2. 電算棟
  3. 板塀(掲示板)の手入れ(改造)
  4. 発言のタイムスタンプ表示

発言のタイムスタンプ表示

このスクリプト、標準では、発言のタイムスタンプ表示のところで年は2桁でしか表示してくれないところがあります。実際、4桁も必要でないことが多いのも確かです。しかし、私は個人的に年は4桁表示が好きなのです。というか、4桁でないと、どのカラムが年で月で日かというのがよくわからない。ほら、アメリカ方式と日本でよく見かける方式とは並び順が違うじゃないですか。そこで、年を4桁で表示させてみることにしました。

さて、WebForum のログの記録方式なんですが、1つの発言につき、タイムスタンプが2つの形式で記録されています。
1つは、表示されるそのままの形式。
もう一つは、UNIXでよくある、1970年1月1日午前0時からの秒数。
そもそも、なぜタイムスタンプが2種類の形式で記録されているのかという点からして不思議なのですが、これは多分、旧バージョンからの互換性として引きずっている盲腸のようなものか、はたまた、将来の新しいバージョンへの布石といったところなのでしょう。ただ、これらの事から、改造をするにあたっては、簡単には2つのアプローチがあることがわかります。1つは、ログの記録形式を変更し、表示される形式の方の年を4桁で記録するようにする方法。もう一つは、ログの記録形式には手を入れず、表示の際に毎回、秒数の方から年月日を算出し、それを表示するようにする方法。

後者の方法を使うのであれば、以下のような形になるでしょう。
改造するスクリプトはwforum.cgiです。
この中に、以下のような記述の部分がいくつかあります。


($no,$reno,$lx,$sub,$email,$url,$name,$dat,$msg,$t,$h,$pw,$w,$oya,$sml,$child) = split(/<>/);

これらの次の行に、以下のような記述を加えます。


$dat = &get_time($t);

ただ、この方法は、ちょっと面倒。
なぜなら、split を行っているところが多数ある上に、それぞれで使っている秒数の部分の変数名が微妙に異なっていたりするからです。それに、多数あるうちの一部では既にこのようなルーチンが実装済だったりします。逆に、なぜ全てのところで実装されていないのかが私には不思議だったりするのですが、その辺は作者の思想の現れという事なんでしょう。

なので、私はこの方法はとらず、表示されるそのままの文字列でログに格納されている部分、ここのところを4桁で記録されるようにしました。これは実に簡単、wf_init.cgi の get_time 関数そのものに手を入れます。


if ($log eq "log") {
        $date = sprintf("%02d/%02d/%02d-%02d:%02d",
                        $year-100,$mon+1,$day,$hour,$min);
} else {

となっているところを


if ($log eq "log") {
        $date = sprintf("%04d/%02d/%02d %02d:%02d",
                        $year+1900,$mon+1,$day,$hour,$min);
} else {

とするだけ。こうすることにより、以後の書き込みは、ログに記録される際に年が4桁表示で記録されるようになります。そして、表示部分ではそれがそのまま表示されるという寸法。ただ、このままだと、それ以前にログに記録されている分が2桁表示のままです。ちょっと美しくないですね。気にしなければいいのかもしれませんが。これに関してはどうするかというと、私は、ログの方を修正することとしました。エディタの機能の一括置換を使えば、それほど手間もかからずに全ての発言の年表記を4桁表示とする事ができました。



板塀(掲示板)の手入れ(改造)
電算棟
やしきの間取り


Copyright © 2006-2007,2010 としき
このページの情報及び著作権は「としき」に帰属します。
Toshiki / toshiki @ jcom.zaq.ne.jp