1

PHPで2つ以上の日付が重複しているかどうかを計算する効率的な方法はありますか?

元。

  • 日付1 :開始1 =2012-03-10/終了1=2012-05-10
  • Date2: Start2 = 2012-04-25 / End2 = 2012-06-01
  • Date3: Start3 = 2012-07-15 / End3 = 2012-08-20

上記の例では、Date1とDate2が重複しているため、Date3はOKです。

4

2 に答える 2

2

日付がYYYY-MM-DD形式の場合は、文字列比較を行うことができます(UNIXタイムスタンプにstrtotime()を使用する場合は、有効な日付である必要はなく、1970年以降である必要もありません)。

if( ($date1['start']>=$date2['start'] && $date1['start']<=$date2['end']) || ($date1['end']>=$date2['start'] && $date1['end']<=$date2['end']) || ($date1['start']<=$date2['start'] && $date1['end']>=$date2['end']) )
{
    // overlap
}

これにより、date1の開始または終了がdate2の開始と終了の間にあるかどうか、またはdate1がdate2を囲んでいるかどうかがチェックされます。

@Germann-Arlingtonに感謝します-

if($date1['start']<=$date2['end'] && $date2['start']<=$date1['end']) { // overlap }
于 2012-08-15T10:30:12.687 に答える
1

(問題を理解しているように)日付がたくさんある場合は、区間木を使用して、日付を整数に変換できます(UNIX時間を使用できます) 。

于 2012-08-15T10:25:27.443 に答える