匿名質問者

perlでif文の書き方


バナーの表示・非表示を制御しようとしてます。
表示中と期限表示のバナー一覧を出し、「これは表示中」と「これは期限外休止中」の画像を表示させたいです。

if($view ne "3"){
if($view eq "2" && $sysdate2 <= $open || $sysdate2 >= $close){
$view_i="[これは期限外休止中!の画像ファイル名]";
}else{
$view_i="[これは表示中!の画像ファイル名]";
}

ここにリスト

}

$viewは1~3の数字で、「表示」「期限表示」「非表示」用です。
$sysdate2はサーバから取得した月日が「0123」(1月23日)等で設定。
$openと$closeには開始・終了日が「0123」(1月23日)等で入ります。

年をまたぐ形(10月30日~1月10日)で登録してみると、掲載期間なのに非掲載になってしまいます。
年をまたがなかったらこれでもいけるのですが、またぐバナーに関しては、年末まで用と年始から用の2つを登録しないといけなくなってしまいます。

どうにかして、1つのバナー登録でうまく表示する方法はありませんか?

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2016/11/04 11:58:10

ベストアンサー

匿名回答1号 No.1

年を含んだ値で比較すればうまくいくかもしれません。
月日だけでは、たとえば10月30日~1月10日の期間中の今日($sysdate2 = 1031)、
「$sysdate2 <= $open」は満たしませんが「$sysdate2 >= $close」は満たし、
期間外と判断されてしまいます。

あと2行目の条件文は念のため、次のように括弧( )を追加したほうがよさそうです。

if($view eq "2" && ($sysdate2 <= $open || $sysdate2 >= $close)){

また10月30日や1月10日を期間に含むのであればイコールを取り除いてください。

if($view eq "2" && ($sysdate2 < $open || $sysdate2 > $close)){

個人的には次のようにするほうが好みです。

if($view eq "2" && ($open <= $sysdate2 && $sysdate2 <= $close)){
$view_i="[これは表示中!の画像ファイル名]";
}else{
$view_i="[これは期限外休止中!の画像ファイル名]";
}

他5件のコメントを見る
匿名回答1号

感謝。大丈夫でしょうか?(祈)

2016/11/01 21:58:11
匿名質問者

ありがとうございます。

今のところ希望通りの動作をしているようです。

2016/11/04 11:58:03

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません