タイトルで私が抱えている問題を明確にするのは難しいですが、シナリオは次のとおりです。私は、3 層の試験受験 Web サイトのバックエンドで作業しています。現在、学生が試験を要求したときに使用する関数を更新しています。試験には、開始日時と終了日時、および時間制限があります。私がやりたいことは、試験期間の残り時間が試験の制限時間よりも少ない場合に固有です。たとえば、試験期間は午後 5:00 に終了します。時刻は現在午後 4 時 30 分です。試験時間は1時間半です。1時間半の制限時間を30分に置き換えたい。そのために必要な日付が 3 つあります。それぞれの取得方法を説明します。
関数ページのタイムスタンプ。コントローラーが私のページを呼び出すと、セッションを開いた後、デフォルトのタイムゾーンを America/New York (私の地域) に設定します。タイムスタンプを取得するには、次のコードを使用します。
$date = date('Ymd H:i:s');
$currenttime = date('H:i:s', strtotime($date));
データベースへの関数呼び出しを使用して、制限時間と試験の終了時刻を取得します (試験の空き状況を確認する他の比較にも日付を使用します)。試験終了時刻は結果配列 $res[10] に格納され、制限時間は $res[11] に格納されます。
試験の期日がタイムスタンプの日付と同じであり、それが試験期間内であると仮定すると (以前に実行した 2 つのチェック)、現在の時刻と試験の終了時間の差が小さいかどうかを確認したい制限時間よりも。試験終了までの時間が制限時間より短い場合は、その時間を新しい制限時間として設定したいと考えています。私のフロント エンドは、結果が HH:mm:ss の形式であることを期待しています (php では H:i:s に相当します)。したがって、試験終了まで 30 分あり、制限時間が 1 時間半の場合、新しい制限時間を 30 分 (または 00:30:00) にしたいと考えています。私のコードは現在、期待どおりに機能していません。私は望ましい結果である if ステートメントの基準を満たしています。それを H:i:s の形式に変換すると、問題があるように見えます (19:00:00 頃に結果が得られます)。私はすべての記事を
$compareTime = strtotime($res[10]) - strtotime($currenttime); if(compareTime < strtotime($res[11]){ $timelimit = date('H:i:s', $compareTime); }else{ $timelimit = $res[11]; }
これを行うためのより良い方法があれば、私は知りたいと思っています。私は php にかなり慣れていないので、これが奇妙な問題かもしれないことは確かに認識していますが、それがグループが進むべき道であると決めた方法です。