如何使用Carbon PHP在连续日期上跳过日期

roqulrg3  于 2023-06-20  发布在  PHP
关注(0)|答案(2)|浏览(112)

如果我使用循环来传递数组中的日期,如何传递连续的日期?我创建了一个简单的函数来解决我的问题,但当我得到> 1个日期连续时,我被卡住了。代码

function daySkip($date, $count=0) {
    $holidays = ["2023-06-19"];

    $MyDateCarbon = Carbon::parse($date);

    $MyDateCarbon->addWeekdays($count);

    for ($i = 1; $i <= $count; $i++) {
        if (in_array(Carbon::parse($date)->addWeekdays($i)->toDateString(), $holidays)) {
            $MyDateCarbon->addDay();
        }
    }

    return $MyDateCarbon->format("d-m-Y");
}

当我使用

$input = "2023-06-16";
$addday = daySkip($input, 1);

//output 20-06-2023

我的代码起作用了。但是如果假日数组中有变化,例如我也输入数据20-06-2023,如

$holidays = ["2023-06-19", "2023-06-20"];

那我的结果还是

//output 20-06-2023

怎么解决?我得到的日期应该是

//output 21-06-2023

我如何做一个适当的循环来获得数组中的假日数量?请指教

x0fgdtte

x0fgdtte1#

我想你可能想在$holiday数组上循环,所以我改变了

for ($i = 1; $i <= $count; $i++) {

for ($i = 1; $i <= count($holidays); $i++) {

所以现在的代码是

function daySkip($date, $count=0) {
    $holidays = ["2023-06-19", "2023-06-20"];

    $MyDateCarbon = Carbon::parse($date);

    $MyDateCarbon->addWeekdays($count);

    for ($i = 1; $i <= count($holidays); $i++) {
        if (in_array(Carbon::parse($date)->addWeekdays($i)->format('Y-m-d'), $holidays)) {
            $MyDateCarbon->addDay();
        }
    }
    // return the carbon Object, then format when received from the function call
    // that way you dont have to have the same format all the time you use this func
    return $MyDateCarbon;
}
$input = "2023-06-16";
$addday = daySkip($input, 1);

echo "started with $input and got " . $addday->format("d-m-Y");

结果就是

started with 2023-06-16 and got 21-06-2023
nuypyhwy

nuypyhwy2#

用这个替换你的for循环。每当数组中有新日期时,它都会添加一个日期

while(in_array($MyDateCarbon->toDateString(), $holidays)) {
    $MyDateCarbon->addDay();
}

相关问题