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です。
日付が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 }