【发布时间】:2021-08-12 09:56:39
【问题描述】:
我设置了一个事件系统,它循环工作。例如,用户可以以 2、4、6 和 8 周为周期创建事件。最终这将是用户可定义的。
我需要能够为任何未实际生成的未来事件计算当前周期。
例如如果用户选择了一个 6 周的事件周期,并且 8 月 9 日是第 5 周,8 月 16 日将是第 6 周,23 日将是第 1 周,依此类推,每周循环循环。例如,如果我们一直到 11 月 15 日,那将是第 1 周。
"2021-08-09"
5
"2021-08-16"
6
"2021-08-23"
1
"2021-08-30"
2
"2021-09-06"
3
如果我知道周期的开始和当前日期,那么计算当前周周期的最佳方法是什么?希望这有意义吗?
我目前有以下内容,但如果我在 5 到 10 年的时间内计算,我会认为循环会非常昂贵。
$start = Carbon\Carbon::parse('2021-08-09');
$end = Carbon\Carbon::parse('2021-11-15');
$cycle_weeks = 6;
$current_cycle = 5;
dump("Week - {$start->toDateString()} - Cycle {$current_cycle}");
// Get current cycle week
while ($start->lt($end)) {
$start = $start->addWeeks(1);
$current_cycle = $current_cycle + 1;
if ($current_cycle > $cycle_weeks) {
$current_cycle = 1;
}
dump("Week - {$start->toDateString()} - Cycle {$current_cycle}");
}
这给了我日期,但代价是每周循环一次,直到结束日期。我想不出一种数学方法——如果有的话——也许可以根据周数的差异来计算周期?
"Week - 2021-08-09 - Cycle 5"
"Week - 2021-08-16 - Cycle 6"
"Week - 2021-08-23 - Cycle 1"
"Week - 2021-08-30 - Cycle 2"
"Week - 2021-09-06 - Cycle 3"
"Week - 2021-09-13 - Cycle 4"
"Week - 2021-09-20 - Cycle 5"
"Week - 2021-09-27 - Cycle 6"
"Week - 2021-10-04 - Cycle 1"
"Week - 2021-10-11 - Cycle 2"
"Week - 2021-10-18 - Cycle 3"
"Week - 2021-10-25 - Cycle 4"
"Week - 2021-11-01 - Cycle 5"
"Week - 2021-11-08 - Cycle 6"
"Week - 2021-11-15 - Cycle 1"
【问题讨论】:
标签: php laravel date php-carbon