繁体   English   中英

从天中获取周和日

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM