php - 如何在 PHP 中将最后所需的天数转换为周数

标签 php arrays datetime

您好,我有一个函数可以返回从当天算起过去 30 天(不包括当前日期)的信息。功能如下

function getLastNDays($days, $format = 'd-m-Y'){
    $m = date("m"); $de = date("d")-1; $y= date("Y");
    $dateArray = array();
    for($i=0; $i<=$days-1; $i++){

        $dateArray[] = date($format, mktime(0,0,0,$m,($de-$i),$y)); 
    }
    $dateArray[] = 'x';
    return array_reverse($dateArray);
}

所以我正在使用这个功能

$sevenarr = getLastNDays(30);

它返回了我这个结果

   Array
(
    [0] => x
    [1] => 19-06-2018
    [2] => 20-06-2018
    [3] => 21-06-2018
    [4] => 22-06-2018
    [5] => 23-06-2018
    [6] => 24-06-2018
    [7] => 25-06-2018
    [8] => 26-06-2018
    [9] => 27-06-2018
    [10] => 28-06-2018
    [11] => 29-06-2018
    [12] => 30-06-2018
    [13] => 01-07-2018
    [14] => 02-07-2018
    [15] => 03-07-2018
    [16] => 04-07-2018
    [17] => 05-07-2018
    [18] => 06-07-2018
    [19] => 07-07-2018
    [20] => 08-07-2018
    [21] => 09-07-2018
    [22] => 10-07-2018
    [23] => 11-07-2018
    [24] => 12-07-2018
    [25] => 13-07-2018
    [26] => 14-07-2018
    [27] => 15-07-2018
    [28] => 16-07-2018
    [29] => 17-07-2018
    [30] => 18-07-2018
)

所以我现在想要的是将结果天显示为周。所以到目前为止我还无法弄清楚如何使用上面的函数来做到这一点。请帮我一些逻辑,我如何更新我的功能,以便我获得最后所需天数的周数。例如最后 30 天它将把天转换为周

我想要的输出是

Array
(
    [0] => Array
        (
            ['start-date'] => 18-07-2018
            ['end-date'] => 12-07-2018
        )

    [1] => Array
        (
            ['start-date'] => 11-07-2018
            ['end-date'] => 5-07-2018
        )

     [2] => Array
        (
            ['start-date'] => 04-07-2018
            ['end-date'] => 28-06-2018
        )

    [3] => Array
        (
            ['start-date'] => 27-06-2018
            ['end-date'] => 21-06-2018
        )
    [4] => Array
        (
            ['start-date'] => 20-06-2018
            ['end-date'] => 19-06-2018
        )

期望的输出

 [weekArray] => Array
        (
            [1] => Array
                (
                    [0] => 2018-06-19
                    [1] => 2018-06-20
                    [2] => 2018-06-21
                    [3] => 2018-06-22
                    [4] => 2018-06-23
                    [5] => 2018-06-24
                    [6] => 2018-06-25
                )

            [2] => Array
                (
                    [0] => 2018-06-26
                    [1] => 2018-06-27
                    [2] => 2018-06-28
                    [3] => 2018-06-29
                    [4] => 2018-06-30
                    [5] => 2018-07-01
                    [6] => 2018-07-02
                )

            [3] => Array
                (
                    [0] => 2018-07-03
                    [1] => 2018-07-04
                    [2] => 2018-07-05
                    [3] => 2018-07-06
                    [4] => 2018-07-07
                    [5] => 2018-07-08
                    [6] => 2018-07-09
                )

            [4] => Array
                (
                    [0] => 2018-07-10
                    [1] => 2018-07-11
                    [2] => 2018-07-12
                    [3] => 2018-07-13
                    [4] => 2018-07-14
                    [5] => 2018-07-15
                    [6] => 2018-07-16
                )

            [5] => Array
                (

                    [0] => 2018-07-17
                    [1] => 2018-07-18
                    [2] => 2018-07-19
                )

        )

最佳答案

检查以下函数以将天数范围转换为周数。我已将星期日视为一周的第一天。

    <?php
    function getLastNDays($days, $format = 'Y-m-d'){

        $retunData = array();

        $m = date("m"); $de = date("d")-1; $y= date("Y");
        $dateArray = array();
        for($i=0; $i<=$days-1; $i++){

            $dateArray[] = date($format, mktime(0,0,0,$m,($de-$i),$y)); 
        }
        //$dateArray[] = 'x';
        $resultArray =  array_reverse($dateArray);

        // After get the date Range find out Statrt & End date
        $start_date = $resultArray[0];
        $end_date = $resultArray[count($resultArray)-1];

        $from_date = new DateTime($start_date);
        $to_date = new DateTime($end_date);
        $interval = new DateInterval('P1D');
        $dateRange = new DatePeriod($from_date, $interval, $to_date);

        $week_number = 1;
        $weekArray = array();

        foreach ($dateRange as $key => $date) {
            $weekArray[$week_number][] = $date->format('Y-m-d');

            $mod = $key%7;
            if($mod == 6){
              $week_number++;
            }  

            /*
            if ($date->format('w') == 6) {
                $week_number++;
            }
            */
        }
        $retunData['weekArray'] = $weekArray;

        //Get the Start & End Date each week.   
        $weekrange = array_map(function($w) {
            return 'start: ' . array_shift($w) 
                . ', end: ' . array_pop($w); },
        $weekArray);

        $retunData['weekRange'] = $weekrange;

        return $retunData;
    }

    $retunData = getLastNDays(30);  // Call your custom function.

    echo '<pre>';
    print_r($retunData);
    exit;

    ?>

    Your Output will be as per the date range.



   Array
(
    [weekArray] => Array
        (
            [1] => Array
                (
                    [0] => 2018-06-20
                    [1] => 2018-06-21
                    [2] => 2018-06-22
                    [3] => 2018-06-23
                    [4] => 2018-06-24
                    [5] => 2018-06-25
                    [6] => 2018-06-26
                )

            [2] => Array
                (
                    [0] => 2018-06-27
                    [1] => 2018-06-28
                    [2] => 2018-06-29
                    [3] => 2018-06-30
                    [4] => 2018-07-01
                    [5] => 2018-07-02
                    [6] => 2018-07-03
                )

            [3] => Array
                (
                    [0] => 2018-07-04
                    [1] => 2018-07-05
                    [2] => 2018-07-06
                    [3] => 2018-07-07
                    [4] => 2018-07-08
                    [5] => 2018-07-09
                    [6] => 2018-07-10
                )

            [4] => Array
                (
                    [0] => 2018-07-11
                    [1] => 2018-07-12
                    [2] => 2018-07-13
                    [3] => 2018-07-14
                    [4] => 2018-07-15
                    [5] => 2018-07-16
                    [6] => 2018-07-17
                )

            [5] => Array
                (
                    [0] => 2018-07-18
                )

        )

    [weekRange] => Array
        (
            [1] => start: 2018-06-20, end: 2018-06-26
            [2] => start: 2018-06-27, end: 2018-07-03
            [3] => start: 2018-07-04, end: 2018-07-10
            [4] => start: 2018-07-11, end: 2018-07-17
            [5] => start: 2018-07-18, end: 
        )

)

关于php - 如何在 PHP 中将最后所需的天数转换为周数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51421555/

相关文章:

php - 如何在 PHP 中获取有用的错误消息?

php: if($some_var != '' ) 与 isset/empty

php - Wordpress walker 调用父 walk() 方法

c - OpenGL:根据 C 语言改编的红皮书示例进行不稳定渲染

c++ - 无法在 std::thread 中传递一维数组

javascript - 在数组中查找字符串

php - 使用mysql和php打印两个日期之间的差异并打印每天的秒数

python-3.x - 按特定月份切片

php - 可怕的 Evercookie 和 CakePHP

c# - 如何检查 LINQ 中的日期范围重叠