@viperpeps

Как проверять забронированные даты в диапазоне чисел?

Для дипломной работы нужно написать скрипт бронирования для гостиничного номера, я понимаю как это сделать, но есть одна сложность. Как проверять забронированные даты (Например забронировано с 11 по 23)?
  • Вопрос задан
  • 252 просмотра
Решения вопроса 1
proudmore
@proudmore
У вас есть два временных интервала.
Путcь первый - N1, Второй - N2.
Необходимо проверить на пересечения. Необходимыми и достаточными являются условия:
1. Дата начала N1 > Даты окончания N2
2. Дата окончания N1 < Даты начала N2.

На языке PHP можно реализовать класс с функционалом проверки пересечения интервалов дат следующим образом:
<?php

namespace common\helpers\DataObjects;

/**
 * Class DateInterval
 * @package common\helpers\DataObjects
 */
class DateInterval
{
    private $start;
    private $end;

    /**
     * DateInterval constructor.
     * @param $start
     * @param $end
     */
    public function __construct($start, $end){
        $this->start = new \DateTime($start);
        $this->end = new \DateTime($end);
    }

    /**
     * @return \DateTime
     */
    public function start(){
        return $this->start;
    }

    /**
     * @return \DateTime
     */
    public function end(){
        return $this->end;
    }

    /**
     * @param DateInterval $interval
     * @return bool
     */
    public function hasOverlap(DateInterval $interval) : bool {
        return
            $this->start > $interval->end() ||
            $this->end < $interval->start()
                ? false : true;
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы