You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按指定时长循环日期?基于不同$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:06:19