- ベストアンサー
PerlのCGIで指定日の23時59分59秒を判別する方法は正しいか
- 指定日の23時59分59秒以前にアクセスすると before.pdf を表示、翌0時00分00秒からは after.pdf を表示させるためのジャンプ台にするCGIを作成
- アクセスした日時が指定日の23時59分59秒以前かどうかを判別する理論設定が誤っていないか心配
- この例では今月末までは before.pdf を表示するという設定のつもりだが、論理的な穴があって思いもよらず6月中にも after.pdf を表示するケースがあったり7月になってからも before.pdf を表示してしまうケースが発生しないか心配
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
切り替え基準日時が目に見えるようにするには、こういう感じですね。 #アクセス時間のUNIXタイム my $t; $t = timelocal($sec, $min, $hour, $mday, $mon, $year); #切り替え予定時間のUNIXタイム my $yotei; $yotei = timelocal("59","59", "23", "30", "6", "2023"); # 両UNIXタイムの比較結果に応じたファイルにジャンプ my $file_name; if ($t <= $yotei) { $file_name = "before.pdf"; } else { $file_name = "after.pdf"; }
その他の回答 (2)
- _kappe_
- ベストアンサー率68% (1581/2304)
2023年7月1日0時0分0秒のUNIX時刻はtimelocal(0, 0, 0, 1, 6, 123)で求められます。タイムゾーンが日本の場合は1688137200という値になります。 アクセスしたタイミングのUNIX時刻を上記の値と比較すればいいです。
お礼
あっ、年号の方で矛盾が出ちゃいますか… ご指摘ありがとうございます。 一旦timelocalで計算する論理をルーチンにするのがまた頭の中でややこしくてイヤだなと思って回避したんですが、やはり避けては通れなそうですね。 やってみます。 どうもありがとうございました。
補足
あっ、申し訳ありません。 No.1の方へのお礼文をこちらに打って投稿してしまいました。 失礼をお詫び申し上げます。 UNIX時刻はそういった値を計算できるサイトに行って拾ってきてソースに入れなければならずにソース上でひと目でわからない面倒な作り方になると思って避けようとしていたのですが、そうでもないんですね。 初歩の初歩しか知らないのでちょっと色々またWeb上で補足情報を探すことにはなりますが、やってみます。 どうもありがとうございました。
- _kappe_
- ベストアンサー率68% (1581/2304)
質問文にあるコードだと、2022年7月1日の場合に"after.pdf"を表示することになるので明らかに誤りです。 UNIX時間(エポックタイム)を求めて、その大小を比較するといいでしょう。 PerlでUNIX時間を求めるにはtimelocal関数を使います。
お礼
あっ、年号の方で矛盾が出ちゃいますか… ご指摘ありがとうございます。 一旦timelocalで計算する論理をルーチンにするのがまた頭の中でややこしくてイヤだなと思って回避したんですが、やはり避けては通れなそうですね。 やってみます。 どうもありがとうございました。
お礼
ご指摘の部分、書き換えてみました。 直感的に数字指定出来てしっかり作動しました。 どうもありがとうございました。