Dazzle
Dazzle

Reputation: 59

Laravel / PHP data filtering with many time

I've database like this

+------------+----------------------------+---------------------------+
|     day    |        start_time          |          end_time         |
+---------------------------------------------------------------------+
|    Sunday  |       01:00                |         03:00             |
|    Sunday  |       13:00                |         15:00             |
|    Sunday  |       19:00                |         21:00             |
+------------+----------------------------+---------------------------+

and for checking date, i do with looping

// **nowTime = 02:00**
$get = DateModel::find($id)->get();
foreach($get as $result){
     if(nowTime >= $result->start_time && nowTime <= $result->end_time){
         echo "in range time";
     }else{
         echo "not in range time";
     }
}

and the result :

in range time  not in range time  not in range time

i just want only show 1 result if there have "in range time" ,

and if all data not in range time, go to else.

any idea ?

Upvotes: 0

Views: 242

Answers (1)

W Kristianto
W Kristianto

Reputation: 9303

You can use mapToGroups collection method.

$get = DateModel::get()
    ->mapToGroups(function ($item, $key) {
        $nowTime = '02:00';

        if ($nowTime >= $item->start_time && $nowTime <= $item->end_time) {
            return ['in range time' => $item];
        } else {
            return ['not in range time' => $item];
        }
    });

Result

array:2 [
  "in range time" => array:1 [
    0 => array:3 [
      "day" => "Sunday"
      "start_time" => "01:00"
      "end_time" => "03:00"
    ]
  ]
  "not in range time" => array:2 [
    0 => array:3 [
      "day" => "Sunday"
      "start_time" => "13:00"
      "end_time" => "15:00"
    ]
    1 => array:3 [
      "day" => "Sunday"
      "start_time" => "19:00"
      "end_time" => "21:00"
    ]
  ]
]

Upvotes: 1

Related Questions