如何按指定时长循环日期?基于不同$eventname实现循环需求
实现基于事件名称的日期循环功能
我来帮你搞定这个按事件名称控制日期循环的逻辑!核心思路是先建立事件关键词和循环规则的映射,再根据事件名称匹配对应规则,最后循环生成日期。以下是具体的实现方案:
步骤1:定义循环规则映射
首先我们把不同的事件关键词和对应的循环参数(循环次数、每次间隔的秒数)整理成一个数组,这样后续修改或新增规则会非常方便:
// 定义事件关键词与循环规则的映射:关键词 => [循环次数, 每次间隔秒数] $cycleRules = [ '每周循环4次' => [4, 604800], // 每周一次,循环4次(间隔7天,60*60*24*7=604800秒) '每两周循环2次' => [2, 1209600], // 每两周一次,循环2次(间隔14天) '每日循环5次' => [5, 86400], // 每天一次,循环5次(间隔1天) // 你可以根据需求继续添加更多规则 ];
步骤2:匹配事件名称并执行循环
接下来我们检测事件标题里是否包含指定关键词,匹配到对应规则后,就可以循环生成日期了:
$eventname = $event->title; // 格式化原始开始日期为时间戳 $start_date = helper('com://site/ohanah.date.format', array( 'date' => $event->start, 'format' => 'Y/m/d H:i', 'timezone' => 'UTC' )); $baseTimestamp = strtotime($start_date); // 默认规则:如果没有匹配到关键词,只生成下一周的日期(保持你原有的逻辑) $cycleCount = 1; $intervalSeconds = 604800; // 遍历规则,匹配事件名称中的关键词 foreach ($cycleRules as $keyword => $rule) { if (strpos($eventname, $keyword) !== false) { $cycleCount = $rule[0]; $intervalSeconds = $rule[1]; break; // 匹配到第一个符合的规则就停止 } } // 循环生成日期并输出 for ($i = 1; $i <= $cycleCount; $i++) { $newTimestamp = $baseTimestamp + ($intervalSeconds * $i); // 格式化输出新日期,这里用你需要的格式即可 echo date('Y/m/d H:i', $newTimestamp) . "<br>"; }
细节说明
- 灵活调整规则:你只需要修改
$cycleRules数组,就能新增或修改不同事件对应的循环逻辑,不用改动核心循环代码。 - 关键词匹配:用
strpos检测事件名称是否包含指定关键词,如果你需要区分大小写,可以换成stripos(不区分大小写)。 - 默认逻辑:如果事件名称没有匹配到任何指定关键词,会默认执行你原来的“增加一周”逻辑,保证兼容性。
这样就能完美实现根据不同$eventname来控制日期循环的需求啦!
内容的提问来源于stack exchange,提问作者user8207054
相关产品推荐
相关产品推荐

