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

PHP实现特殊规则下的下一个工作日计算及跳过指定银行假日

完善PHP函数get_next_workday()以满足自定义工作日规则

我来帮你实现符合需求的get_next_workday()函数,同时兼顾两个核心规则:跳过周五13:00至周日24:00期间的周一,以及排除指定银行假日。

需求回顾

  • 基础规则:工作日为周一至周五
  • 特殊规则:若当前时间处于周五13:00到周日24:00之间,需跳过紧接着的周一,直接寻找下一个符合条件的工作日
  • 额外规则:需排除数组中声明的银行假日

完整实现代码

function get_next_workday() {
    // 定义银行假日列表(格式:d-M-Y)
    $bankhols = array(
        '25-Dec-2018',
        '26-Dec-2018',
        // 可根据需要添加更多假日
    );
    
    $current_time = time();
    $skip_next_monday = false;
    
    // 判断当前是否处于周五13:00至周日24:00之间
    $current_day = date('w', $current_time);
    $current_hour = (int)date('H', $current_time);
    if ($current_day == 5 && $current_hour >= 13) { // 周五13点之后
        $skip_next_monday = true;
    } elseif ($current_day == 6 || $current_day == 0) { // 周六或周日全天
        $skip_next_monday = true;
    }
    
    // 从下一天开始逐个检查,直到找到符合条件的工作日
    $days_to_check = 1;
    while (true) {
        $candidate_time = strtotime("+$days_to_check day", $current_time);
        $candidate_day_num = (int)date('w', $candidate_time);
        $candidate_day_text = date('d-M-Y', $candidate_time);
        
        // 检查是否是要跳过的周一
        if ($skip_next_monday && $candidate_day_num == 1) {
            $days_to_check++;
            continue;
        }
        
        // 检查是否是工作日(周一至周五)且非银行假日
        if ($candidate_day_num > 0 && $candidate_day_num < 6 && !in_array($candidate_day_text, $bankhols)) {
            // 返回格式化后的日期或时间戳,这里返回格式化日期
            return date('Y-m-d', $candidate_time);
            // 若需要返回时间戳,可改为 return $candidate_time;
        }
        
        $days_to_check++;
    }
}

// 测试示例
echo get_next_workday();

代码关键点说明

  1. 特殊时间段判断:

    • 先检查当前时间是否在周五13点后、周六或周日,标记是否需要跳过下一个周一
    • 这样处理能精准覆盖需求中“跳过周五13:00至周日24:00期间的周一”的规则
  2. 动态循环检查:

    • 放弃原代码固定检查5天的逻辑,改用while(true)循环,确保在遇到连续假日+周末的极端情况时也能找到正确的下一个工作日
  3. 假日与工作日验证:

    • 先判断候选日期是否是需要跳过的周一,再验证是否为周一至周五的工作日,最后检查是否不在银行假日列表中
    • 顺序优化能减少不必要的判断,提升效率
  4. 灵活的返回格式:

    • 示例中返回Y-m-d格式的日期字符串,你可以根据需求改为返回时间戳或其他日期格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:04:24