簡體   English   中英

如何在php的日期范圍列表中檢查日期范圍

[英]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.

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