用PHP计算两周之间的中间周天数

用PHP计算两周之间的中间周天数,php,weekday,Php,Weekday,有两个工作日:星期一、星期三 如何获得该阵列中的中间天数? 回答:星期一、星期二、星期三 案例2:从周一到周一 答:周一、周二、周三、周四、周五、周六、周日、周一 谢谢 我创建了这个函数,它可以实现这一点,注释将引导您了解它是如何实现的 function list_days($start, $end) { //convert day "word" to it's given number //Monday = 1, Tuesday = 2 ... Sunday = 7

有两个工作日:星期一、星期三

如何获得该阵列中的中间天数? 回答:星期一、星期二、星期三

案例2:从周一到周一 答:周一、周二、周三、周四、周五、周六、周日、周一


谢谢

我创建了这个函数,它可以实现这一点,注释将引导您了解它是如何实现的

function list_days($start, $end) {

    //convert day "word" to it's given number
    //Monday = 1, Tuesday = 2 ... Sunday = 7
    $start_n = date('N', strtotime($start));
    $end_n = $end_range = date('N', strtotime($end));

    //we also set $end_range above, by default it's set to the $end day number, 
    //but if $start and $end are the same it will be changed later.

    //create an empty output array
    $output = [];

    //determine end_range for the for loop
    //if $start and $end are not the same, the $end_range is simply the number of $end (set earlier)
    if($start_n == $end_n) {

        //if $start and $end ARE the same, we know there is always 7 days between the days
        //So we just add 7 to the start day number.
        $end_range = $start_n + 7;
    }

    //loop through, generate a list of days
    for ($x = $start_n; $x <= $end_range; $x++) {

        //convert day number back to the readable text, and put it in the output array
        $output[] = date('l', strtotime("Sunday +{$x} days"));
    }

    //return a string with commas separating the words.
    return implode(', ', $output);
}
例2:

echo list_days('Monday', 'Monday');
//output: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday, Monday

我已经创建了这个函数,它可以实现这一点,并且注释会引导您了解它是如何完成的

function list_days($start, $end) {

    //convert day "word" to it's given number
    //Monday = 1, Tuesday = 2 ... Sunday = 7
    $start_n = date('N', strtotime($start));
    $end_n = $end_range = date('N', strtotime($end));

    //we also set $end_range above, by default it's set to the $end day number, 
    //but if $start and $end are the same it will be changed later.

    //create an empty output array
    $output = [];

    //determine end_range for the for loop
    //if $start and $end are not the same, the $end_range is simply the number of $end (set earlier)
    if($start_n == $end_n) {

        //if $start and $end ARE the same, we know there is always 7 days between the days
        //So we just add 7 to the start day number.
        $end_range = $start_n + 7;
    }

    //loop through, generate a list of days
    for ($x = $start_n; $x <= $end_range; $x++) {

        //convert day number back to the readable text, and put it in the output array
        $output[] = date('l', strtotime("Sunday +{$x} days"));
    }

    //return a string with commas separating the words.
    return implode(', ', $output);
}
例2:

echo list_days('Monday', 'Monday');
//output: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday, Monday

我的解决方案更多的是移动数组的内部指针,直到找到边距,并将边距之间的元素推入另一个结果数组。无论初始数组中的数据是什么,都可以使用

function getDaysInBetween($start, $end)
    {
        $weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];

        $start_found = false;

        $days = [];

        while(true) {
            $next = next($weekdays);
            $day = (empty($day) || !$next)?reset($weekdays):$next;

            if($day === $start) $start_found = true;

            if($start_found) {
                $days[] = $day;
                if($day===$end && count($days)>1) return implode(", ",$days);
            }

        }

    }

这里的实时演示:

我的解决方案更多的是移动数组的内部指针,直到找到边距,并将边距之间的元素推送到另一个结果数组中。无论初始数组中的数据是什么,都可以使用

function getDaysInBetween($start, $end)
    {
        $weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];

        $start_found = false;

        $days = [];

        while(true) {
            $next = next($weekdays);
            $day = (empty($day) || !$next)?reset($weekdays):$next;

            if($day === $start) $start_found = true;

            if($start_found) {
                $days[] = $day;
                if($day===$end && count($days)>1) return implode(", ",$days);
            }

        }

    }

此处的实时演示:

到目前为止您尝试过什么吗?您可以创建一个数组,列出星期一到星期天两次,循环它,如果天等于开始日,则开始输出,停止检查开始日,如果天等于结束日,则停止循环。星期六和星期日不被视为“星期天”,它们是“周末”。那么,在星期一到星期一的示例中,是否应该从输出中省略这些内容呢?在这种情况下,星期六和星期天也应该被考虑。如果遇到问题,请尝试我的建议,然后带着尝试过的代码返回。到目前为止,您是否尝试过任何操作?您可以创建一个数组,其中列出星期一到星期天两次,循环它,如果日等于开始日,则开始输出,停止检查开始日,如果日等于结束日,则停止循环。周六和周日不被视为“周日”,它们是“周终”。那么,在星期一到星期一的示例中,是否应该从输出中省略这些内容呢?在这种情况下,星期六和星期天也应该考虑在内。请尝试我的建议,如果遇到问题,请返回您尝试的代码。@lolo我实际上似乎犯了一个错误,请检查答案中的当前代码以修复它。基本上是错误造成的,所以如果你做了星期二->星期二,星期三->星期三等(基本上不是星期一->星期一),它将返回错误。@lolo我实际上似乎犯了错误,请检查答案中的当前代码以修复它。基本上是错误造成的,所以如果你做了星期二->星期二,星期三->星期三等(基本上不是星期一->星期一),它会返回错误。我最初打算这样做,但我被卡住了。我看到您使用了
count($days)>1
,如果我想到这一点,我会有一个类似的解决方案:DI最初打算做类似的事情,但我被卡住了。我看到您使用了
count($days)>1
,如果我想到这一点,我会有一个类似的解决方案:D