Рубрики
Uncategorized

Алгоритм совпадения интервалов: суждение о совпадении нескольких периодов времени

Автор оригинала: David Wong.

php

/**
 *Time period coincidence judgment
 *@ param array $data date array
 *@ param string $fieldstart start start date field name
 *@ param string $fieldend end date field name
 *@ return bool true means coincidence, false means non coincidence
 */
function is_time_cross(array $data, string $fieldStart = 'start_day', string $fieldEnd = 'end_day')
{
    //Sort by start date
    array_multisort(
        array_column($data, $fieldStart),
        SORT_ASC,
        $data
    );

    //Bubble judge whether meet the condition of time period coincidence
    $num = count($data);
    for ($i = 1; $i < $num; $i++) {
        $pre = $data[$i-1];
        $current = $data[$i];
        if (strtotime($pre[$fieldStart]) <= strtotime($current[$fieldEnd]) && strtotime($current[$fieldStart]) <= strtotime($pre[$fieldEnd])) {
            return true;
        }
    }

    return false;
}

//Test example
$data = [
    ['start_day' => '2019-01-01', 'end_day' => '2019-01-31'],
    ['start_day' => '2018-01-01', 'end_day' => '2018-01-31'],
    ['start_day' => '2019-03-01', 'end_day' => '2019-05-31'],
    ['start_day' => '2019-10-01', 'end_day' => '2019-10-31'],
    ['start_day' => '2019-04-01', 'end_day' => '2019-04-10'],
];
var_dump(is_time_cross($data));

Оригинал: “https://developpaper.com/interval-coincidence-algorithm-multiple-time-periods-coincidence-judgment/”