如何解决获取当前/下一个/接下来 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 举报,一经查实,本站将立刻删除。