[英]How to check a date range in list of date range in php
我有一個表格報價,我在其中存儲了一個產品的多個日期范圍。
------------------table----------------------
offer_id | sdate | edate | price
1 | 5-08-2019 | 10-08-2019 | 200
1 | 15-08-2019 | 20-08-2019 | 200
問題是當我想為 offer_id 存儲一個新的日期范圍時, 1 不應該匹配或在存儲的日期范圍之間。
如果我想存儲 02-08-2019 到 05-08-2019 不應該保存。 如果我想將 06-08-2019 存儲到 12-08-2019 不應該存儲,因為第一條記錄之間是 06-08-2019。
$saveStartDate = Test::where('offer_id',1)->pluck('sdate');
$saveEndDate = Test::where('offer_id',1)->pluck('edate');
$startDate = $request->sdate;
$endeDate = $request->edate;
// validation
foreach($saveStartDate as $saveStartValue){
if($saveStartValue > $startDate ){
foreach($saveEndDate as $saveEndValue){
if($saveEndValue > $saveEndDate){
return "go to save";
}
}
}
}
return "exit";
您可以檢查現有記錄是否與請求的日期范圍重疊:
if (Test::whereBetween('sdate', [$startDate, $endDate])
->orWhereBetween('edate', [$startDate, $endDate])
->exists()) {
echo('Requested date range overlaps with an existing record');
}
您可以嘗試使用Carbon
來解析請求的日期,然后檢查數據庫中的現有記錄以確定兩個日期范圍是否重疊。
$startDate = \Carbon\Carbon::parse($request->sdate);
$endeDate = \Carbon\Carbon::parse($request->edate);
$dataCount = Test::whereBetween('sdate', [$startDate, $endeDate])
->orWhereBetween('edate', [$startDate, $endeDate])->count();
if($dataCount > 0){
return "go to save";
}
我解決了我的問題,但我使用了 1 個以上的條件
$data = Test::get();
$i = Test::where(function ($query) use ($startDate, $endDate) {
$query->where(function ($query) use ($startDate, $endDate) {
$query->where('start_date', '>=', $startDate)
->where('end_date', '<', $startDate);
})
->orWhere(function ($query) use ($startDate, $endDate) {
$query->where('start_date', '<', $endDate)
->where('end_date', '>=', $endDate);
});
})->count();
if($i == 0){
$check = Test::where('service_detail_id', $id)
->whereNotBetween('start_date', [$startDate, $endDate])
->where('start_date','>', $startDate)
->where('start_date','>' , $endDate )
->get();
if(count($check) > 0 ){
$i = 0;
}
else{
$i = 1;
}
}
if($i == 0){
foreach($data as $value){
if($value->start_date < $startDate && $value->end_date > $startDate ){
$i =1;
}else{
$i =0;
}
}
}
if($i == 0){
return "go and store";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.