获取当前/下一个/接下来 2 周的日期数组

问题描述

总结:我需要从当前周、下周和接下来的两周中获取给定周/年(周一至周五)的年份编号、周编号和日期。

问题:我无法在一年中的最后几周正确获取周数/年

场景:我按照 ISO 8601 规则将年份和周数保存在数据库中。这就像用户议程一样,用户会保存其本周、下周和接下来的 2 周的活动。

我的尝试:

我正在生成给定年份和日期的数组,如下所示:

Array
(
    [week_info] => Array
        (
            [type] => current_week
            [week] => 51
            [year] => 2020
            [days] => Array
                (
                    [monday] => 2020-12-14
                    [tuesday] => 2020-12-15
                    [wednesday] => 2020-12-16
                    [thursday] => 2020-12-17
                    [friday] => 2020-12-18
                )

        )

)

问题总是发生在去年的最后一周,获取信息如下:

Array
(
    [week_info] => Array
        (
            [type] => next_two_weeks
            [days] => Array
                (
                    [monday] => 2022-01-03
                    [tuesday] => 2022-01-04
                    [wednesday] => 2022-01-05
                    [thursday] => 2022-01-06
                    [friday] => 2022-01-07
                )

            [year] => 2022
            [week] => 01
        )

)

我是如何尝试的:

本周:

$week = date('W',strtotime('+0 week'));
$year = date('Y',strtotime('+0 week +2 days'));
return array("year" => $year,"week" => $week);

下周:

$week = date('W',strtotime('+1 week'));
$year = date('Y',strtotime('+1 week +2 days'));
return array("year" => $year,"week" => $week);

接下来的两周:

$week = date('W',strtotime('+2 weeks'));
$year = date('Y',strtotime('+2 weeks +2 days'));
return array("year" => $year,"week" => $week);

当我获得年份和周数时,我使用以下函数获得日期设置:

接收 $param_year 和 $param_week 作为参数的函数

$dates_day = array();
for($day=1; $day<=5; $day++) {
array_push($dates_day,date('Y-m-d',strtotime($param_year."W".$param_week.$day)));
}
$dateset= array(
"week_info" => array(
"type" => $param_week_type,"days" => array(
"monday" => $dates_day[0],"tuesday" => $dates_day[1],"wednesday" => $dates_day[2],"thursday" => $dates_day[3],"friday" => $dates_day[4]),"year" => date("Y",strtotime($dates_day[4])),"week" => date("W",strtotime($dates_day[0])),));
return $dateset; 

我做错了什么?我该怎么做才能正确?

解决方法

function test($year,$week) {
        $pointInTime = strtotime($year . 'W' . $week);
        for ($n = 0; $n != 5; $n++) {
            echo("\n" . date('Y-m-d l',$pointInTime));
            $pointInTime = strtotime('+1 day',$pointInTime);
        };
    }

 var_dump(test(2020,53));

// 2020-12-28 Monday
// 2020-12-29 Tuesday
// 2020-12-30 Wednesday
// 2020-12-31 Thursday
// 2021-01-01 Friday

如果您想添加接下来的两周:

 function test($year,$week,$addWeeks = 0) {
        $pointInTime = strtotime($year . 'W' . $week);

        if ($addWeeks)
            $pointInTime = strtotime('+'.$addWeeks.' weeks',$pointInTime);

        for ($n = 0; $n != 5; $n++) {
            echo("\n" . date('Y-m-d l',$pointInTime);
        };
    } 

   echo "\n This week: ";
        $this->test(2020,53);
        echo "\n Next week: ";
        $this->test(2020,53,1);
        echo "\n Next another week: ";
        $this->test(2020,2);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...