微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决获取当前/下一个/接下来 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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?