こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

CGI「Key Search」日付だけ表示したい

KentWebさんのサイト内検索CGI「Key Search」について、
今は↓このように
http://www.kent-web.com/data/ksearch/ksearch.cgi?code=%B4%C1%BB%FA&q=CGI&cond=1&logs=10&sort=1
日付が「日付 : 2014/05/27(Tue) 06:17:11」と時間まで表示されているのですが、
これを「日付 : 2014/05/27(Tue) 」と日付だけにしたいのです。

「ksearch.cgi」の

# 結果
my $i = $pg;
my $body;
foreach (@log) {
my ($page,$ttl,$time,$wd,$bk,$nx,$yyyymmdd,$year) = split(/\t/);
$i++;

my $tmp = $loop;
$tmp =~ s/!num!/$i/g;
$tmp =~ s/!title!/$ttl/g;
$tmp =~ s/!url!/$url$page/g;
$tmp =~ s|!doc!|$bk<b>$wd</b>$nx|g;
$tmp =~ s/!date!/&date($time)/eg;
$body .= $tmp;

!date!のあたりをいじればいいんだろうと思っていろいろやりましたが、
ページを更新した日付になってくれません。

どうしたらできるでしょうか…

投稿日時 - 2016-11-11 09:36:54

QNo.9254221

困ってます

質問者が選んだベストアンサー

$tmp =~ s/!date!/&date($time)/eg;
では、テンプレートに !date!という キーワードが来た時に
&date($time) で、 date()サブルーチンを 実行しているので
init.cgiの中にある sub date()の 中身を修正することになります。
ただし、&date(~)は、他にもログの書き出しなどに使われているようなので、
これ自体を変更してしまうと 不具合が発生する可能性があるので
別のサブルーチンを作るか、sub date()に任意引数を追加して書式を切り替えるかです。

簡単になら
$tmp =~ s/!date!/&date($time)/eg;

$tmp =~ s/!date!/&date2($time)/eg;
みたいに呼び出すサブルーチン名を変更して、そのサブルーチンを新規に作ればよいです。
「2014/05/27(Tue)」 みたいにしたいなら、

sub date2 {
my $time = shift;
# 曜日
my @week = qw|Sun Mon Tue Wed Thu Fri Sat|;
# フォーマット
my ($sec,$min,$hour,$mday,$mon,$year,$wday) = (localtime($time))[0..6];
sprintf("%04d/%02d/%02d(%s)",$year+1900,$mon+1,$mday,$week[$wday]);
}
て感じです。

#ちなみに、@weekの宣言を日 月 火 …にして、曜日を日本語にすることもできるでしょうけど
#サイトの文字コードに合わせたコード変換処理を通さないと 文字化けするかもしれません。

投稿日時 - 2016-11-11 12:26:00

お礼

init.cgiをいじるんでしたか…。
教えていただいたとおりにやってみたらできました!ありがとうございます!!
あと@weekの宣言を日 月 火 …にしても文字化けは起こりませんでした!

投稿日時 - 2016-11-11 13:40:59

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)