8

2 つの日付範囲 (たとえば、5 月 1 日から 5 月 31 日までと 5 月 23 日から 6 月 5 日まで) がある場合、PHP で 2 つの期間が何日重複するかを調べるにはどうすればよいでしょうか (したがって、9 が返されます)。DatePeriod オブジェクトを使用してこれを行う方法はありますか?

(うまくいけば)私の質問を明確にするために編集してください:

基本的に、任意の 2 つの日付範囲を指定すると、両方の日付範囲に共通する日数を返す関数が必要です。重複がある場合は重複する日数を返し、そうでない場合は 0 を返します。これは、範囲ごとに日付の配列を作成し、それらをループして同一の日付を見つけ、変数を使用してカウントすることで実行できると考えました。一致の数 - しかし、私はもっとエレガントなものを探しています.

4

2 に答える 2

34

ここで基本的なロジックを提供してくれた @phpisuber01 と2 つの日付範囲が重複しているかどうかを判断することに感謝します。4 つの変数は DateTime オブジェクトである必要があります。

function datesOverlap($start_one,$end_one,$start_two,$end_two) {

   if($start_one <= $end_two && $end_one >= $start_two) { //If the dates overlap
        return min($end_one,$end_two)->diff(max($start_two,$start_one))->days + 1; //return how many days overlap
   }

   return 0; //Return 0 if there is no overlap
}
于 2013-01-07T21:01:19.680 に答える
2

これに基づく実際の情報はありません.. オブジェクトを使用して日数の差を計算する方法の基本的な例を次に示しDateTimeます。

$datetime1 = new DateTime('2013-05-23');
$datetime2 = new DateTime('2013-05-31');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days'); //returns 8 days

そこにある文字列を使用可能なタイムスタンプ/形式に変換する方法を知っていると思います。

于 2013-01-07T19:34:50.553 に答える