我需要根据当前周数轮换 3 个选项;即:
if($weekNumber == 42 || $weekNumber == 43){
$thisID = 1;
}
else if($weekNumber == 44 || $weekNumber == 45){
$thisID = 3;
}
else if($weekNumber == 46 || $weekNumber == 47){
$thisID = 2;
}
else if($weekNumber == 48 || $weekNumber == 49){
$thisID = 1;
}
我显然希望这不那么手动! 我已经考虑过将 3 个 ID 放在一个数组中,并根据自日期 X 以来经过的周数进行选择,但我不确定如何实现它。
此外...展期需要在星期五的中午。 我也考虑过简单地增加上述计划中周数,并对我们从第 52 周滚动到第 1 周的时间进行额外调整,但必须有一个更明智的方法!
谢谢
你为什么不取一周数字的四舍五入的一半?然后,您只需要一个包含 26 个 ID 的目录,就可以实现直接查找:
$catalog=[1,2,3,4,5,6,3,4,2,5,6,7,4,4,7,9,5,8,8,9,2,4,5,7,6,8,9];
$thisID = $catalog[floor($weekNumber/2)];
这应该有效:
$options = array(1,2,3);
$offset = 129600;
$twoWeeks = 1209600;
$idx = floor((time()-$offset)/$twoWeeks) % count($options);
$chosenOption = $options[$idx];
一些解释:
- 0 Unix 时间是星期四的午夜,所以第一个星期五的中午是 129600 秒之后。
- 有了
time()-$offset
,我们将时间更改为将星期五中午设置为时间计算的零点。 - 现在,由于星期五中午是零点,我们可以简单地将经过的秒数除以 1209600 来计算从第一个星期五中午开始的完整两周数。