Let's assume that you have a list of Time Slots generated within the 30 minutes intervals. You need to get the closest time slot in the past based on the current server time.
eg:
Start Time: 14:00
End Time: 18:00
Interval: 30 (minutes)
Output:
14:00 14:30 15:00 15:30 16:00 16:30 17:00 17:30 18:00
Current time: 17:26 (you can get the current server time from the Magento DateTimeFactory)
So the output will be 17:00.
Why? because we have 30minutes intervals in our time list. Therefore according to the current time 17:26 the previous closest time slot is 17:00
How to get the current Date/Time from Magento core
use \Magento\Framework\Stdlib\DateTime\DateTimeFactory; /** * @var DateTimeFactory */ protected $dateTimeFactory; public function __construct( DateTimeFactory $dateTimeFactory ) { $this->dateTimeFactory = $dateTimeFactory; } public function getClosestTimeSlot() { $dateModel = $this->dateTimeFactory->create(); $currTime = date('H:i', strtotime($dateModel->gmtDate())); $openingTime = '14:00'; $closingTime = '18:00'; $interval = 30; //in minutes $timeSlots = []; //set the intervals based on the $timeSlotLength $nextInterval = '+' . $interval . 'minutes'; $strOpeningTime = strtotime($openingTime); $strClosingTime = strtotime($closingTime); while ($strOpeningTime <= $strClosingTime) { array_push($timeSlots, date('H:i', $strOpeningTime)); $strOpeningTime = strtotime($nextInterval, $strOpeningTime); } //sets the array to be returned with the lowest time slot from time slot array $timeArray = [ 'lower '=> min(current($timeSlots), $currTime) ]; //store the closest lower time slot to the $timeArray foreach ($timeSlots as $ts) { if ($currTime > $ts) $timeArray['lower'] = $ts; } return $timeArray['lower']; //output will be 17:00 }
cheers!!
Top comments (0)