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

如何在PHP中按指定星期时段控制内容显示?

实现基于星期时段的内容显示判断逻辑

嘿,我来帮你搞定这个基于星期时段的内容显示判断问题!根据你的需求,我们需要处理两种核心场景:时段在同一个星期内(比如周一到周三),以及跨星期的时段(比如周四到下周三)。下面是具体的实现思路和完整代码:

核心思路

首先,我们需要把星期的英文缩写(比如sun、mon)转换成数字,这样更方便进行大小比较。这里我们约定:sun=0、mon=1、tue=2、wed=3、thu=4、fri=5、sat=6。

然后分两种情况处理判断逻辑:

  1. 时段在同一周内:当起始星期的数字小于等于结束星期的数字时,比如周日(0)到周三(3)、周一(1)到周五(5)。
  2. 时段跨周:当起始星期的数字大于结束星期的数字时,比如周四(4)到下周三(3),这时候时段覆盖了从起始日到本周日,再加上下周一到结束日。

完整实现代码

if (file_exists('feeds/ptp-ess_landing.json')) { 
    $data = json_decode(file_get_contents('feeds/ptp-ess_landing.json')); 
}
date_default_timezone_set('America/Toronto');
$arradate = strtolower(date('D'));
$nowtime = (int)date('His');
$start_day = $data->select_start_day;
$start_time = (int)$data->start_time;
$end_day = $data->select_end_day;
$end_time = (int)$data->end_time;

// 建立星期缩写到数字的映射,方便比较
$dayMap = [
    'sun' => 0,
    'mon' => 1,
    'tue' => 2,
    'wed' => 3,
    'thu' => 4,
    'fri' => 5,
    'sat' => 6
];

// 转换为数字格式的星期
$currentDay = $dayMap[$arradate];
$startDayNum = $dayMap[$start_day];
$endDayNum = $dayMap[$end_day];

$isInRange = false;

// 分两种场景判断是否在时段内
if ($startDayNum <= $endDayNum) {
    // 场景1:时段在同一周内(比如周日到周三、周一到周五)
    if ($currentDay > $startDayNum && $currentDay < $endDayNum) {
        // 当前星期在起始和结束之间,全天生效
        $isInRange = true;
    } elseif ($currentDay == $startDayNum && $nowtime >= $start_time) {
        // 当前是起始日,且时间不早于起始时间
        $isInRange = true;
    } elseif ($currentDay == $endDayNum && $nowtime <= $end_time) {
        // 当前是结束日,且时间不晚于结束时间
        $isInRange = true;
    }
} else {
    // 场景2:时段跨周(比如周四到下周三)
    if ($currentDay >= $startDayNum || $currentDay <= $endDayNum) {
        // 当前星期在起始日到周日,或者周一到结束日的范围内
        if ($currentDay == $startDayNum) {
            // 当前是起始日,需满足时间不早于起始时间
            $isInRange = $nowtime >= $start_time;
        } elseif ($currentDay == $endDayNum) {
            // 当前是结束日,需满足时间不晚于结束时间
            $isInRange = $nowtime <= $end_time;
        } else {
            // 其他日期全天生效
            $isInRange = true;
        }
    }
}

// 如果在时段内,输出内容
if ($isInRange) {
    echo "Its in range";
}

场景验证

我们来对应你给出的场景测试一下逻辑是否正确:

  • 场景1:时段为周一8:00至周一18:00,当前为周三。此时起始和结束星期都是1,当前星期是2,不在范围内,所以不生效,符合预期。
  • 场景2:时段为周一18:00至周五18:00。周二到周四的任意时间都会生效;周一18:00之后生效;周五18:00之前生效,完全符合需求。
  • 场景3:时段为周日18:00至周一18:00。周日18:00之后、周一18:00之前的时间都会生效,正确覆盖需求的时段。
  • 场景4:时段为周二18:00至周五18:00,当前为周二21:00。当前是起始日且时间晚于18:00,所以生效,符合预期。
  • 场景5:时段为周四18:00至周三18:00。周四18:00之后、周五到周二全天、周三18:00之前的时间都会生效,完美覆盖跨周的时段需求。

内容的提问来源于stack exchange,提问作者flash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:12:23