在php中查找两个日期之间的假期

问题描述

嗨,我有 3 个日期 DropoffDate,atd and utd。 逻辑是 atd = DropOffDate + 3 Daysutd = DropOffDate + 9 Days

如果 DropOffDate = 24-12-2019 那么 atd = 27-12-2019 and utd = 02-01-2020

我有一系列假期

Array
(
    [0] => 25-12-2019
    [1] => 01-01-2020
    [2] => 18-04-2019
    [3] => 26-12-2019
    [4] => 01-08-2021
    [5] => 30-11-2021
    [6] => 04-01-2021
)

现在的要求是找出 DropOffDate 和 atd 之间的所有假期,并将这些天数添加到 atd 和相同的 utd。如果最终的 atd 或 utd 再次放假,则再增加一天。

到目前为止,我已经编写了这个脚本,但它只获取一个假期,而不会查找下一个假期

$holidayList = Array
(
    [0] => 25-12-2019
    [1] => 01-01-2020
    [2] => 18-04-2019
    [3] => 26-12-2019
    [4] => 01-08-2021
    [5] => 30-11-2021
    [6] => 04-01-2021
)
            
            $dropDate = '24-12-2019';
            $atd = date("d-m-Y",strtotime("+3 days",$dod));
            $utd = date("d-m-Y",strtotime("+9 days",$dod));
            $dropDate = strtotime($dropDate);
            $atd = strtotime($atd);
            $utd = strtotime($utd);

            foreach($holidayList as $holiday){
                $holiDate = date('d-m-Y',strtotime($holiday));
                $holiDate = strtotime($holiDate);

                if (($holiDate >= $dropDate) && ($holiDate <= $atd)){
                    $atd = date('d-m-Y',$atd);
                    $atd = date("d-m-Y",strtotime("+1 days",$atd));
                }
                if(($holiDate >= $dropDate) && ($holiDate <= $utd)){
                    $utd = date('d-m-Y',$utd);
                    $utd = date("d-m-Y",$utd));
                }
            } 

            echo "<b>AT Date".$atd."<br>";
            echo "<b>UT Date".$utd;

ATD 和 UTD 应该是 29-12-2019 和 5-1-2020。请帮忙!

解决方法

您的代码有不必要的从时间戳到字符串的日期转换。如果您清除所有内容,您将获得预期日期。

$dropDate = strtotime('24-12-2019');
$atd = strtotime("+3 days",$dropDate);
$utd = strtotime("+9 days",$dropDate);

foreach($holidayList as $holiday){
    $holiDate = strtotime($holiday);

    if (($holiDate >= $dropDate) && ($holiDate <= $atd)){
        $atd = strtotime("+1 days",$atd);
    }
    if(($holiDate >= $dropDate) && ($holiDate <= $utd)){
        $utd = strtotime("+1 days",$utd);
    }
} 

echo "AT Date ",date('d-m-Y',$atd),"\n";
echo "UT Date ",$utd);

// Output:
// AT Date 29-12-2019
// UT Date 05-01-2020

fiddle