簡體   English   中英

如何檢查時間間隔在Laravel 4.2 / php中是否重疊?

[英]How to check if time intervals are overlapping in Laravel 4.2/php?

因此,我在數據庫中的表tm_timekeep(id(pk),start(varchar),end(varchar))[及其模型]中以HH:MM格式有一些時間間隔。 例如:

id|start|end  |
---------------
0 |10:00|10:30| 
1 |11:23|11:55|
2 |13:15|15:39|

如果間隔之間沒有重疊,我想插入新行並修改現有行。 如果我想添加間隔11:57-12:40可以,但是09:00-10:20不會因為10:00-10:30而已,因為更新行相同。 如果我想更新一行,則需要一個函數在修改該行之前檢查條件。 我應該怎么做? 我當前的代碼段:

public function checkInterval($start, $end){
 $counter = 0;
$timekeepArray = Timekeep::all();
$start = date('H:i',Input::get('start'));
$end = date('H:i',Input::get('end'));
foreach($timekeepArray as $timekeep) 
{
 if($start <= $timekeep->end && $end>=$timekeep->start){
  counter++; //in range
 }
  return counter;
  }
 }

在此之后,我檢查了counter的值,但是我的問題是,即使輸入重疊,我也總是得到0。

這非常瑣碎-例如,將您的時間間隔轉換為分鍾。 10:00變為10 * 60 + 0 = 600分鍾,對應於630結束。

然后,當您嘗試插入或更新時,建議您在綁定到“保存”模型事件的Timekeep模型中進行操作(請參閱Model Events ),請檢查是否:

1)選擇以分鍾為單位的最后一個結束時間,該時間小於您的新開始時間(這是一個瑣碎的SQL查詢)2)查看該結束時間與您的新結束時間之間是否存在任何現有時間-如果存在,重疊。 引發異常,取消模型保存

您可以通過多種方式將字符串轉換為分鍾-您可以將整數存儲在MySQL(例如600)中,然后通過定義getAttribute()或使用自己的方法將其轉換為人類可讀的小時數。 或者,您可以繼續將數據存儲為VARCHAR,並在SQL或PHP中進行簡單的字符串操作(刪除“:”,將第一部分乘以60)。

暫無
暫無

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

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