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

締切り済みの質問

12月から1月へのリンク

apacheログ集計プログラムを作っています。
全体の流れとしては、ログを指定したテキストファイルに書き出し、
それを読み込み、適切な形に直し、HTMLテーブルにいれて表示、という感じです。

その中の適切な形に直すところなのですが、

select sysdate,
to_char(add_months(to_date($yearmonth,'YYYYMM'),-1),'YYYYMM') as LAST_MONTH,
to_char(add_months(to_date($yearmonth,'YYYYMM'),+1),'YYYYMM') as NEXT_MONTH
from テーブル名

で200812や
200901といった日付をとってきています。
(データはしっかり入ってきます。)

このデータを利用し、
$last_monthには200812
$next_monthには200901のように入っていると仮定し、
リンクを作りますと、

# 先月のリンク
my $href_last_month = undef;
if ($last_month) {
my $last_month_year = substr($last_month,0,4);
my $last_month_month = substr($last_month,4,2);
$href_last_month = qq(<a href="$THIS?year=$last_month_year&month=$last_month_month">&lt;&lt;</a>);
}

# 来月のリンク
my $href_next_month = undef;
if (($next_month) && ($next_month <= $thismonth)) {
my $next_month_year = substr($next_month,0,4);
my $next_month_month = substr($next_month,4,2);
$href_next_month = qq(<a href="$THIS?year=$next_month_year&month=$next_month_month">&gt;&gt;</a>);
}
のようになりました。

しかし、これをブラウザで表示させても、
先月(=200811へのリンク)へのリンクは表示されますが、
来月(=200801へのリンク)が表示されません。

200812(当月、今いる画面)に
#来月のリンク部分 で+1をしても、200813となってしまい、
エラーになるからだと思います。

どなたか、200812の画面で、
今表示されない200901へのリンクボタン=来月へのリンクボタンを表示できるようにするには
どうしたらいいか教えてくださいませ。

ちなみに200812や200901などは、自動でとってきており、
一番はじめのindex.cgiの画面には必ず当月がとれてきます(今日index.cgiをアクセスすれば、200901のログ集計結果ページが出ます。
このとき、200902はまだ訪れておりませんから、来月へのリンクボタン>>は表示されません。
先月への<<のみ表示されます、先月へは問題なくリンクできます。


13月を1月としてくれる、select文でのadd_month関数を使っているのに。。。
初心者なものでここでギブです。。お助けください。

投稿日時 - 2009-01-07 16:22:05

QNo.4611328

すぐに回答ほしいです

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

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

回答(3)

ANo.3

正直いって「# 来月のリンク部分」にある
if (($next_month) && ($next_month <= $thismonth))
という条件の意味 (特に後ろのところ) が分からんのだけど, まあ基本的には同じですね>#2.
一度「年」と「月」をわけて「月」をインクリメントする. で, 「月」が 13になったら「年」をインクリメントして「月」を 1に戻す, と.

投稿日時 - 2009-01-07 17:05:34

ANo.2

失礼しました perl でしたね・・・。

投稿日時 - 2009-01-07 16:38:30

ANo.1

VBでしょうか。
長らく使ってないので、書けませんが、ロジック的には、
200812を日付型にして+1 すれば 200901 になると思います。
あるいは、12+1 で 12を超えたら 1 にすれば yearを+1してmonthを1にすればよいだけのことではないかと。

イメージとしては以下のような感じでしょうか。

if (next_month>12){
next_month=1;
next_year=next_year+1;
}

投稿日時 - 2009-01-07 16:31:13

あなたにオススメの質問