Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 比较两个数组之间的日期值_Php_Arrays_Date - Fatal编程技术网

Php 比较两个数组之间的日期值

Php 比较两个数组之间的日期值,php,arrays,date,Php,Arrays,Date,因此,我有两个数组中的一些日期: $old_1 = array( array( 'start_date' => '2014-09-06', 'end_date' => ' 2014-09-07' ), array( 'start_date' => '2014-09-26', 'end_date'

因此,我有两个数组中的一些日期:

$old_1 = array(
    array(
                'start_date' => '2014-09-06',
                'end_date' => ' 2014-09-07'
            ),
            array(
                'start_date' => '2014-09-26',
                'end_date' => '2014-09-28'
            ),
            array(
                'start_date' => '2014-09-29',
                'end_date' => '2014-10-02'
            ),
            array(
                'start_date' => '2014-10-03',
                'end_date' => ' 2014-10-04'
            ),
            array(
                'start_date' => '2014-10-06',
                'end_date' => ' 2014-10-23'
            ),
        array(
                'start_date' => '2014-11-19',
                'end_date' => '2014-11-23'
            ),
            array(
                'start_date' => '2014-11-25',
                'end_date' => ' 2014-11-28'
            )
);

$new_1 = array(
    array(
                'start_date' => '2014-10-03',
                'end_date' => ' 2014-10-04'
            ),
            array(
                'start_date' => '2014-10-10',
                'end_date' => ' 2014-10-12'
            ),
            array(
                'start_date' => '2014-10-17',
                'end_date' => '2014-10-19'
            ),
            array(
                'start_date' => '2014-11-19',
                'end_date' => ' 2014-11-23'
            ),
            array(
                'start_date' => '2014-11-25',
                'end_date' => '2014-11-28'
            )
);
$old_2 = array(
    array(
                'start_date' => '2014-09-26',
                'end_date' => '2014-09-28'
            ),
            array(
                'start_date' => '2014-10-03',
                'end_date' => ' 2014-10-04'
            )
);
$new_2 = array(
    array(
                'start_date' => '2014-09-26',
                'end_date' => '2014-09-28'
            ),
            array(
                'start_date' => '2014-10-03',
                'end_date' => ' 2014-10-04'
            ),
            array(
                'start_date' => '2014-10-17',
                'end_date' => '2014-10-20'
            ),
            array(
                'start_date' => '2014-10-29',
                'end_date' => ' 2015-01-02'
            )
);
我比较了数组$old_1和数组$new_1,寻找数组$old_1中没有的日期。我所期望的结果是:

$expected_1 = array(
    array(
            array(
                'start_date' => '2014-10-10',
                'end_date' => ' 2014-10-12'
            ),
            array(
                'start_date' => '2014-10-17',
                'end_date' => '2014-10-19'
            )
);
我使用此功能来执行此操作:

function checkDate($redDate, $date_range)
    {
        $start_object = DateTime::createFromFormat('Y-m-d', $redDate['start_date']);
        $end_object = DateTime::createFromFormat('Y-m-d', $redDate['end_date']);

        if (is_array($date_range)) {
            foreach ($date_range as $key => $row) {
                $range_start = DateTime::createFromFormat('Y-m-d', $row['start_date']);
                $range_end = DateTime::createFromFormat('Y-m-d', $row['end_date']);

                if ($start_object != $range_start && $end_object != $range_end) {
                    if ($start_object < $range_end && $end_object > $range_start) {
                        $date = $redDate;
                    }
                }
            }
        }

        return $date;
    }

$expected = array();
foreach ($new_1 as $dates) {
$value = checkDate($dates, $old_1);
if (!empty($value)) {
$expected[] = $value;
}
}
我期待着:

$expected_2 = array(
        array(
                array(
                    'start_date' => '2014-10-17',
                    'end_date' => '2014-10-20'
                ),
                array(
                    'start_date' => '2014-10-29',
                    'end_date' => ' 2015-01-02'
                )
    );
但我得到的是空数组:

$result_2 = array(
    );
我是否遗漏了比较函数中的某些内容? 我需要你们的建议,谢谢:

试试这个checkDate功能:

function checkDate($redDate, $date_range)
    {
        $start_object = DateTime::createFromFormat('Y-m-d', $redDate['start_date']);
        $end_object = DateTime::createFromFormat('Y-m-d', $redDate['end_date']);

        if (is_array($date_range)) {
            foreach ($date_range as $key => $row) {
                $range_start = DateTime::createFromFormat('Y-m-d', $row['start_date']);
                $range_end = DateTime::createFromFormat('Y-m-d', $row['end_date']);

                // if the date was found return a null object
                if ($start_object == $range_start && $end_object == $range_end) {
                    return null;
                }
            }
        }

        // the date was not found so return the date
        return $redDate;
    }

示例的某些日期中有空格。这是一个你应该改正的错误

这里有内部if的痕迹

2014-09-26 < 2014-10-04 TRUE && 2014-09-28 > 2014-10-03 FALSE
2014-10-03 < 2014-09-28 FALSE && 2014-10-04 > 2014-09-26 TRUE
2014-10-17 < 2014-09-28 FALSE && 2014-10-20 > 2014-09-26 TRUE
2014-10-17 < 2014-10-04 FALSE && 2014-10-20 > 2014-10-03 TRUE
2014-10-29 < 2014-09-28 FALSE && 2015-01-02 > 2014-09-26 TRUE
2014-10-29 < 2014-10-04 FALSE && 2015-01-02 > 2014-10-03 TRUE
array(0) { }

不管怎样,我不知道你到底在找什么。您想要实现什么?

我正在寻找$new\u 1数组中的开始日期-结束日期,而不是$old\u 1数组中的日期范围。抱歉,我刚才没有提到,$old_1数组是从数据库/表中提取的,而$new_1数组是从服务中提取的。我想将不在数据库/表中的新获取的数据插入其中。您好,是的,它工作了,现在我得到了预期的结果。有一个新问题,在数组$new\u 1中,我得到了:数组‘开始日期’=>‘2014-10-10’、‘结束日期’=>‘2014-10-12’、数组‘开始日期’=>‘2014-10-17’,“结束日期”=>“2014-10-19”,与$old\u 1数组的旧值重叠:数组“开始日期”=>“2014-10-06”,“结束日期”=>“2014-10-23”,当新数组值与旧数组值冲突时,如何消除它们?因此$expected_1的正确值是空数组,因为10-12和10-17由于重叠而被消除。非常感谢。