2016-11-16 8 views
-1

日時が範囲内にあるかどうかを確認する方法を示す多くのSOの質問がありますが、あなたが再帰的にやりたいときに、日付範囲は1日以上にわたっています。PHP時間が範囲内にあるかどうか再確認する範囲が1日以上ある場合

例として、火曜日の22:00から次のThrusdayの07:30の間にあるかどうかをどのようにチェックしますか?あなたは週にその週をどのようにしていますか?

+0

してください[編集] [あなたがこれまでにしようとしているものを]示すためにあなたの質問(のhttp:/ /whathaveyoutried.com)。問題のあるコードの[mcve]を含める必要があります。次に、特定の問題を解決するために役立つことができます。 [ask]も読んでください。 –

+0

@TobySpeightもし私が試したことを書いたら、答えを自分の質問にするのはどういう意味でしょうか(SOの励ましとして)(https://stackoverflow.blog/2011/07/its-ok-to-ask-and-あなた自身の質問/答え)とにかく、 "火曜日の22:00と、次の木曜日の07:30の間に、どうしたらいいでしょうか?"私には、最小、完全で検証可能なようです。私はあなたの "あなたがこれまでに試したことがある"リンクがサイト外にあることに気付きました。これについてのSOの指針を指摘できますか? – Dom

答えて

1

PHPのDataTimeクラスのコンストラクタは、相対的な引数this xxxdayを受け取ります。この引数を使用すると、現在の時刻から次の「xxxday」を得ることができます。

たとえば、new DateTime('next friday')は、現在の日付と比較して次の金曜日に00:00:00を表すdatetimeオブジェクトを提供します。現在の日がの場合は、金曜日です。返される日付です。

だから、あなたはその後、

$end = new DateTime(next thursday 07:30); 

を定義した場合$endは、今日は火曜日であれば、今日のために、現在の時刻から次の火曜日に22時00分、または20:00表すDateTimeオブジェクトです。そして、あなたは、現在の時刻から木曜日の午前7時30分前にあなたのDateTimeオブジェクトの1DAY、9hoursと30分を与える

$start = clone $end; 
$start = $end->sub(new DateInterval('P1DT9H30M')); 

でスタートを切るために末尾から間隔を取ることができ、または現在の時刻から次の木曜日の前の火曜日の22:00。

その後、あなたは、現在の日時を取得し、その開始日と終了日の時間の間かどうかを確認することができます

$now = new DateTime(); 
if($now >= $start && $now <= $end) { 
    //In interval 
} 
関連する問題