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

PHP适配任意跨零点时段执行的代码问题求助(用于暗黑模式)

PHP实现跨零点的暗黑模式定时切换方案

你的原代码逻辑错误在于:当时段跨零点(如22:00至次日08:00)时,$hour > 22 && $hour < 8这个条件永远无法成立——一个小时值不可能同时大于22且小于8。以下是适配任意24小时时段(含跨零点场景)的解决方案:

核心逻辑

时段分为两种情况处理:

  • 不跨零点(如10:00-18:00):直接判断当前小时是否在开始和结束小时之间
  • 跨零点(如21:00-08:00、22:00-03:00):判断当前小时大于等于开始小时(当天晚段),或者小于等于结束小时(次日凌晨)

基础实现代码

// 获取当前小时(转为整数,避免字符串比较误差)
$current_hour = intval(date('H'));

// 自定义目标时段:24小时制的开始/结束小时
$start_hour = 22;
$end_hour = 8;

// 判断是否处于暗黑模式时段
$enable_dark_mode = false;
if ($start_hour <= $end_hour) {
    // 时段未跨零点(如9:00-17:00)
    $enable_dark_mode = ($current_hour >= $start_hour && $current_hour <= $end_hour);
} else {
    // 时段跨零点(如22:00-08:00)
    $enable_dark_mode = ($current_hour >= $start_hour || $current_hour <= $end_hour);
}

// 实际业务逻辑:切换暗黑模式
if ($enable_dark_mode) {
    echo "Good night"; // 这里替换为开启暗黑模式的代码(如添加CSS类、加载暗黑样式)
} else {
    echo "Good Morning"; // 替换为关闭暗黑模式的代码
}

可复用函数封装

如果需要在多处调用时段判断逻辑,可以封装成函数:

/**
 * 判断当前时间是否在指定24小时时段内
 * @param int $start_hour 开始小时(0-23,24小时制)
 * @param int $end_hour 结束小时(0-23,24小时制)
 * @return bool
 */
function is_in_target_time_range(int $start_hour, int $end_hour): bool {
    $current_hour = intval(date('H'));
    return $start_hour <= $end_hour 
        ? ($current_hour >= $start_hour && $current_hour <= $end_hour)
        : ($current_hour >= $start_hour || $current_hour <= $end_hour);
}

// 使用示例
// 场景1:跨零点时段(21:00-08:00)
if (is_in_target_time_range(21, 8)) {
    // 开启暗黑模式
}

// 场景2:不跨零点时段(14:00-19:00)
if (is_in_target_time_range(14, 19)) {
    // 执行对应时段逻辑
}

注意事项

  • 务必将小时转为整数后比较,避免字符串比较的潜在问题(例如'08'和'8'的字符串比较结果不符合预期)
  • 该方案支持任意24小时制时段配置,无需额外处理跨天逻辑
  • 实际项目中,可将$enable_dark_mode的结果用于控制页面样式类、加载不同样式文件等操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:30:47