php - 循环生成一年中的几周并不总是正确的
问题描述
我想遍历一个日期范围内的所有星期(从星期一到星期日):
function getInfoWeeks($date_start, $date_end) {
$start = new DateTime($date_start);
$start2 = new DateTime($date_end);
$year_number = $start->format('Y');
$end = new DateTime($data_fine);
$interval = new DateInterval('P1W');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $date) {
$week = new stdClass();
$firstday = $start -> setISODate( $year_number, (int)$date -> format('W'), 1 );
$lastday = $start2 -> setISODate( $year_number, (int)$date -> format('W'), 7 );
$week -> period = $date->format('d-m-Y');
$week -> month = strftime("%B", $date -> getTimestamp());
$week -> monthNr = (int)$date -> format('m');
$week -> nr = $date -> format('W');
$week -> firstday = $firstday->format('d-m-Y');
$week -> lastday = $lastday->format('d-m-Y');
$week -> year_number = $year_number;
$array_week[] = $week;
}
return $array_week;}
对于 getInfoWeeks("2020-01-01", "2020-12-31") 是正确的,我明白了:
Array
(
[0] => stdClass Object
(
[period] => 01-01-2020
[month] => gennaio
[monthNr] => 1
[nr] => 01
[firstday] => 30-12-2019
[lastday] => 05-01-2020
[year_number] => 2020
)
[1] => stdClass Object
(
[period] => 08-01-2020
[month] => gennaio
[monthNr] => 1
[nr] => 02
[firstday] => 06-01-2020
[lastday] => 12-01-2020
[year_number] => 2020
)...
但是对于 getInfoWeeks("2021-01-01", "2021-12-31") 对于 array[0] 来说是错误的,因为有 2022:
Array
(
[0] => stdClass Object
(
[period] => 01-01-2021
[month] => gennaio
[monthNr] => 1
[nr] => 53
[firstday] => 03-01-2022
[lastday] => 09-01-2022
[year_number] => 2021
)
[1] => stdClass Object
(
[period] => 08-01-2021
[month] => gennaio
[monthNr] => 1
[nr] => 01
[firstday] => 04-01-2021
[lastday] => 10-01-2021
[year_number] => 2021
)
...
为什么 2020 年是可以的,而 2021 年(以及 2022 年)是错误的?哪里错了?
解决方案
我不明白我错在哪里,所以为了解决我添加了这个条件
foreach ($period as $date) { $i++; ... if ($i == 1 && $week->nr = 53) continue;
...它不是很优雅,但它有效
推荐阅读
- c++ - 使用 SFINAE 确保可变参数包参数派生为特定类型
- c++ - 是否应该在同一进程中使用 IUIAutomation 缓存请求?
- html - 为什么子div不浮动到右侧?
- python - Python 查找声明了类型别名(例如 Union,...)的文件
- javascript - 如何用烧瓶导入js文件?(Python)
- r - R 可反应 - 在 colDef 中应用多种样式
- html - 如何在 css 中做可点击的自定义下拉箭头?
- reactjs - 反应原生将大代码移动到单独的文件中 - 它是一个钩子吗?
- anaconda - 无法安装最新版本的 conda-forge 软件包
- javascript - 在 Google Apps 脚本中异步运行函数