[英]Get week and day from days
我有很多天,比如说 20 天
我想要函数返回周数和星期几的数组。
当前的实现和问题:
function weekAndDayNumberFromDays($days)
{
$week = (int) floor($days / 7);
$dayRemainder = $days % 7;
return [
'week' => $week,
'day' => $dayRemainder
];
}
称呼
foreach (range(1, 20) as $day) {
dump("Day #" . $day, weekAndDayNumberFromDays($day));
}
输出
“第一天”
数组:2 [▼ “周” => 0 “天” => 1 ]
“第2天”
数组:2 [▼“周”=> 0“天”=> 2 ]
“第3天”
数组:2 [▼ “周” => 0 “天” => 3 ]
“第 4 天”
数组:2 [▼“周”=> 0“天”=> 4 ]
“第5天”
数组:2 [▼“周”=> 0“天”=> 5]
“第 6 天”
数组:2 [▼“周”=> 0“天”=> 6 ]
“第 7 天”
数组:2 [▼“周”=> 1“天”=> 0 ]
“第8天”
数组:2 [▼ “周” => 1 “天” => 1 ]
“第 9 天”
数组:2 [▼ “周” => 1 “天” => 2 ]
“第 10 天”
数组:2 [▼ “周” => 1 “天” => 3 ]
“第 11 天”
数组:2 [▼ “周” => 1 “天” => 4 ]
“第 12 天”
数组:2 [▼ “周” => 1 “天” => 5 ]
“第 13 天”
数组:2 [▼“周”=> 1“天”=> 6 ]
“第 14 天”
数组:2 [▼“周”=> 2“天”=> 0 ]
“第 15 天”
数组:2 [▼“周”=> 2“天”=> 1 ]
“第 16 天”
数组:2 [▼“周”=> 2“天”=> 2 ]
“第 17 天”
数组:2 [▼“周”=> 2“天”=> 3 ]
“第 18 天”
数组:2 [▼“周”=> 2“天”=> 4 ]
“第 19 天”
数组:2 [▼“周”=> 2“天”=> 5]
“第 20 天”
数组:2 [▼“周”=> 2“天”=> 6 ]
我想打印例如“第 1 周,第 1 天”,“第 3 周,第 5 天”而没有“第 0 周或第 0 天”。
尝试使用ceil
而不是 floor
function weekAndDayNumberFromDays($days)
{
$week = (int) ceil($days / 7);
$dayRemainder = $days % 7;
return [
'week' => $week,
'day' => $dayRemainder
];
}
一周有 7 天。 (当然)
您将一周的最后一天移至下周执行$days % 7
,如果天是 7,则7 % 7 == 0
1 % 7 == 1
2 % 7 == 2
...
7 % 7 == 0
因此,删除 1 天会将一周的最后一天保留为当前的一天:
0 % 7 == 0
1 % 7 == 1
...
6 % 7 == 6
这个结果可以递增,第一天为 1,第二天为 2...第七天为 7
正如Donkarnash 的回答中所述,您将周数加 1 或简单地调用ceil()
是正确的:
function weekAndDayNumberFromDays($days)
{
$days--;
$week = floor($days / 7) + 1;
$dayRemainder = ($days % 7) + 1;
return [
'week' => $week,
'day' => $dayRemainder
];
}
foreach (range(1, 20) as $day) {
$arr = weekAndDayNumberFromDays($day);
echo "Day #$day : week {$arr['week']}, day {$arr['day']}" . PHP_EOL;
}
输出 :
Day #1 : week 1, day 1
Day #2 : week 1, day 2
Day #3 : week 1, day 3
Day #4 : week 1, day 4
Day #5 : week 1, day 5
Day #6 : week 1, day 6
Day #7 : week 1, day 7
Day #8 : week 2, day 1
Day #9 : week 2, day 2
Day #10 : week 2, day 3
Day #11 : week 2, day 4
Day #12 : week 2, day 5
Day #13 : week 2, day 6
Day #14 : week 2, day 7
Day #15 : week 3, day 1
Day #16 : week 3, day 2
Day #17 : week 3, day 3
Day #18 : week 3, day 4
Day #19 : week 3, day 5
Day #20 : week 3, day 6
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.