计算两个日期之间的约会

时间:2019-04-25 20:24:48

标签: php mysql codeigniter mysqli

情况:

我有一个数组,其中包含使用的约会信息以及基于PHP的新约会系列的计算天数。

例如,存在约会数组:

Array
(
    [0] => Array
        (
            [date] => 2019-05-02
            [time_start] => 14:00:00
            [time_end] => 15:30:00
        )
    [1] => Array
        (
            [date] => 2019-05-06
            [time_start] => 14:00:00
            [time_end] => 15:30:00
        )
)

现在,我将检查是否存在与现有约会的计算序列(相同数组格式)冲突。

我的问题: 我如何检查开始时间和结束时间之间是否存在冲突,如果是,我如何在存在约会之后或之前,使用时间窗口为数组赋予新值。这是从上午08:00到下午4:00的时间范围内。

我所拥有的是约会天数的计算。

 private function calculate_dates($data, $measure)
{

    $this->load->model('calendar/calendar_model');
    $holiday_dates = $this->calendar_model->get_holidays();

    foreach ($holiday_dates as $key => $value) {
        $holidays[] = $value['holiday_date'];
    }

    $begin = new DateTime($data->measure_begin);
    $end = new DateTime($data->measure_end);
    $oneday = new DateInterval("P1D");
    $days = json_decode($data->measure_dates);
    $wdays = array();
    $ue_minutes = 0;

    $minutes = ($data->measure_ue * $measure->ue_minutes/2);
    $daterange = new DatePeriod( $begin, DateInterval::createFromDateString('+1 weekdays') ,$end );

    foreach(new DatePeriod($begin, $oneday, $end->add($oneday)) as $day) {
        $day_num = $day->format("N"); /* 'N' number days 1 (mon) to 7 (sun) */
        if($day_num < 6 ) { /* weekday */
            $wdays[] = $day;
        }
    }

    $count = 1;
    foreach($wdays as $date){
        foreach ($days as $key => $value) {
            if(mb_strtolower($date->format('l')) == $value){

                if(($data->measure_ue/2)+1 != $count){
                    if(in_array($date->format('Y-m-d'), $holidays)) {
                        $dates[] = $this->close_days($date, $days, true)->format('l, d.m.Y');
                    } else {
                        $dates[] = $date->format('l, d.m.Y');
                    }
                    $count++;
                }
            }
        }
    }

    return array(
        'dates' => $dates,
        'minutes' => round($minutes/count($dates))
    );
}

private function close_days($date, $days, $init = false)
{
    if($init){
        $days[] = 'saturday';
        $days[] = 'sunday';
    }

    if( in_array(mb_strtolower($date->format('l')), $days) ) {
        $this->close_days($date->modify('next day'), $days);
    }
    return $date;
}

对解决方案有任何想法,或者对更好的方法有一个代码?

0 个答案:

没有答案