【问题标题】:Get dates array from current/next/next 2 weeks从当前/下一个/下 2 周获取日期数组
【发布时间】:2021-03-30 06:52:54
【问题描述】:

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

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

场景:按照 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);

接下来的 2 周:

$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; 

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

【问题讨论】:

标签: php date calendar php-carbon


【解决方案1】:
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));
            $pointInTime = strtotime('+1 day', $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, 53, 2);

【讨论】:

  • 感谢您的帮助,我的主要问题是根据当前日期获取年份和星期。
  • $yearNow = date('Y',time()); $weekNow = date('W',time());确保您在代码中设置了正确的时区。
  • 当前时间不需要第二个参数,默认即可。 date('Y')date('W') 就足够了。
猜你喜欢
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
相关资源
最近更新 更多