【发布时间】: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;
我做错了什么?我应该怎么做才正确?
【问题讨论】:
-
检查 Carbon 文档中的 isoWeek() 和 isoWeekYear():carbon.nesbot.com/docs/#api-week,这可能就是您要查找的内容。
标签: php date calendar php-carbon