简体   繁体   中英

Substract Time Logic - PHP

I want to show time slots between 2 times. Start time & End time. Used below code, it's working fine. It loops start and end time and add 30 mins to time. Starts from 2:00pm, 2:30pm, 3:00pm all the way till 10:00pm

$start_time =  "14:00:00";
$end_time =  "22:30:00";

@for ($i = strtotime($start_time); $i < strtotime($end_time); $i=$i+1800)
  <li data-time="{{date('g:i A', $i)}}" class="timefield">{{date("g:i A", $i)}}</li>
@endfor

What I am stuck on is 2 parts

  • Hide past time, lets say right now is 4:00pm, it should hide past time slots ie 2:00pm,2:30pm,:3:00pm,3:30pm
  • If right now is 4:00pm, it should start from 5:00pm all the way till 10:00pm. Adding extra buffer time of 1 hour.

You could insert the current timestamp in your logic like this:

$start_time =  strtotime("14:00:00");
$end_time =  strtotime("22:30:00");
    
$now = (new DateTime())->getTimestamp();
$nowRemaining = $now % 1800; // Divide to half hours & get the remaining seconds
$nowRounded = $now - $nowRemaining; // Round to half hours
$nextHour = $nowRounded + ($nowRemaining == 0 ? 3600 : 5400); // Add the extra buffer
    
for ($i = max($start_time, $nextHour); $i < $end_time; $i=$i+1800) {
  ...
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM