Проверьте в PHP, покрывают ли поддиапазоны дату родительского диапазона - PullRequest
0 голосов
/ 07 июня 2019

Мне нужно проверить с помощью PHP, охватывает ли диапазон поддиапазоны, добавленные динамически.

Например, для диапазона: 2019-06-07 10:00:00 - 2019-06-09 11:00:00

с поддиапазонами:

2019-06-07 10:00:00 - 2019-06-07 23:59:59
2019-06-08 00:00:00 - 2019-06-09 11:00:00

В порядке

, но с поддиапазонами:

2019-06-07 10:00:00 - 2019-06-07 23:59:59
2019-06-08 00:00:00 - 2019-06-09 10:00:00
2019-06-09 10:30:00 - 2019-06-09 11:00:00

НЕ в порядке, потому что есть пробел: 2019-06-09 10:00:00 to 2019-06-09 10:30:00

Моя цель - вернуть только true или false.

Я не уверен, как начать приближаться к этой проверке без боли.

1 Ответ

1 голос
/ 07 июня 2019

Обведите их и проверьте разницу во времени между начальным элементом одного диапазона и конечным элементом предыдущего диапазона.

$TimeRange = array();
$TimeRange[0]['start'] = '2019-06-07 10:00:00';
$TimeRange[0]['end'] = '2019-06-07 23:59:59';
$TimeRange[1]['start'] = '2019-06-08 00:00:00';
$TimeRange[1]['end'] = '2019-06-09 11:00:00';

for($i = 0; $i <= count($TimeRange) - 1; $i++)
{
    if(isset($TimeRange[($i + 1)]))
    {
        $StartTime = strtotime($TimeRange[($i + 1)]['start']);
        $EndTime = strtotime($TimeRange[$i]['end']);
        $SecondsDiff = $StartTime - $EndTime;
        echo $i . ": " . $StartTime . " vs " . $EndTime . " = " . $SecondsDiff . "<br>\n";
        if($SecondsDiff > 1)
            return false;
    }
}
echo "<hr>Broken check<br>";
$TimeRange = array();
$TimeRange[0]['start'] = '2019-06-07 10:00:00';
$TimeRange[0]['end'] = '2019-06-07 23:59:59';
$TimeRange[1]['start'] = '2019-06-08 00:00:00';
$TimeRange[1]['end'] = '2019-06-09 10:00:00';
$TimeRange[2]['start'] = '2019-06-09 10:30:00';
$TimeRange[2]['end'] = '2019-06-09 11:00:00';

for($i = 0; $i < count($TimeRange); $i++)
{
    if(isset($TimeRange[($i + 1)]))
    {
        $StartTime = strtotime($TimeRange[($i + 1)]['start']);
        $EndTime = strtotime($TimeRange[$i]['end']);
        $SecondsDiff = $StartTime - $EndTime;
        echo $i . ": " . $StartTime . " vs " . $EndTime . " = " . $SecondsDiff . "<br>\n";
        if($SecondsDiff > 1)
            return false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...