【问题标题】:Find holidays between two dates in php在php中查找两个日期之间的假期
【发布时间】:2021-04-10 12:01:17
【问题描述】:

嗨,我有 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", strtotime("+1 days", $utd));
                }
            } 

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

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

【问题讨论】:

    标签: php arrays date datetime foreach


    【解决方案1】:

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

    $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 ",  date('d-m-Y',$utd);
    
    // Output:
    // AT Date 29-12-2019
    // UT Date 05-01-2020
    

    fiddle

    【讨论】:

      猜你喜欢
      • 2020-07-19
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-25
      • 1970-01-01
      相关资源
      最近更新 更多