Моя база данных содержит переменные даты, начала и конца. В моем коде я беру начало и их, когда пользователь их выбирает, и конвертирую их в метки времени, как это делается (все внутри цикла foreach) ..
$selectionDate = strtotime($timeQry['date']);
$startTimes[] = strtotime($timeQry['start'],$selectionDate);
$endTimes[] = strtotime($timeQry['end'],$selectionDate);
Это дает мне правильное время начала и окончания как метки времени. Затем у меня есть логическое утверждение, чтобы проверить его и посмотреть, перекрывается ли какое-либо из выбранных времен ....
if(($startTimes[1] < $startTimes[0]) && ($endTimes[1] > $startTimes[0]) ||
($startTimes[1] > $startTimes[0]) && ($startTimes[1] < $endTimes[0]) )
{
echo "overlap"
}
Это нормально работает большую часть времени, однако, если один из времени окончания, если после 12 часов ночи (скажем, 02:00 утра), тогда эта отметка времени будет меньше, чем время начала, потому что код использует дату начала бронирования на. Это приводит к сбою логики и пропуску перекрытия.
Я думал о том, чтобы сделать:
if( ($endTimes[$k] >= $selectionDate) )
{
$endTimes[] = strtotime($timeQry['end'],$newDate+ 1253574000);
}
else
{
$endTimes[] = strtotime($timeQry['end'],$selectionDate);
}
//...run same logic query
Который создает новую дату, которая является днем позже. Но я не думаю, что это правильный путь. Если кто-нибудь может мне помочь, я был бы очень благодарен. Это заставило меня немного почесать голову! Большое спасибо