簡體   English   中英

在PHP中檢測重疊的時間范圍

[英]Detect overlapping time ranges in PHP

在此處輸入圖片說明

我想查看時間范圍是否重疊,如果重疊,則應返回true,否則返回false。 如果我選擇了這個時間范圍:

10:30:00-11:30:00

那么我需要檢查它是否與另一個時間范圍不重疊。 例如:

10:30:00-11:30:00與10: 30: 00-12:30:00重疊,因此我必須禁用廣告位,但我不知道如何正確進行比較。

我具有以下功能,但我認為它無法正常運行。

  $as = $selectedSlot['slot_start'];
  $ae = $selectedSlot['slot_end'];
  $bs = $DB_slots['slot_start'];
  $be = $DB_slots['slot_end'];


function checkSlotRange($as,$ae,$bs,$be){
  $as = strtotime($as);
  $ae = strtotime($ae);
  $bs = strtotime($bs);
  $be = strtotime($be);
  if($as <= $bs && $ae <= $be){
    return true;
  }else{
  return false;
  }  
}

您檢查時間的邏輯錯誤。 您需要檢查A的開始時間是否晚於B的開始時間,並且A的結束時間早於B的結束時間。

<?php
function checkSlotRange($as,$ae,$bs,$be){
    $as = strtotime($as);
    $ae = strtotime($ae);
    $bs = strtotime($bs);
    $be = strtotime($be);
    return ($as >= $bs && $ae <= $be); 
}
var_dump(checkSlotRange("10:30", "11:30", "09:30", "12:30")); // true
var_dump(checkSlotRange("10:30", "11:30", "11:40", "12:30")); // false

演示

我不知道您的時間范圍是否超過午夜,但如果確實如此,則需要將時間添加到時間戳中以進行比較,否則會得到意外的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM