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

PHP实现字符串日期加1个工作日的技术咨询

解决方案:给指定日期添加N个工作日

嘿,这个需求我之前做项目的时候也遇到过——普通的strtotime("$date + 1 days")只会单纯加自然日,碰到周末就会出错。要实现**只加工作日(周一至周五)**的功能,其实核心就是判断每次添加后的日期是否为周末,是的话就顺延。我给你几个实用的PHP实现方式:

方法一:基础时间戳循环判断

这种方法用原生的strtotime和date函数实现,逻辑直白好理解:

$date = '2018-04-20';
$daysToAdd = 1;

$currentTimestamp = strtotime($date);

while ($daysToAdd > 0) {
    // 先加一天
    $currentTimestamp = strtotime('+1 day', $currentTimestamp);
    // 用date('N')获取星期几(1=周一,7=周日)
    $weekDay = date('N', $currentTimestamp);
    // 如果是工作日,就减少需要添加的天数
    if ($weekDay >= 1 && $weekDay <= 5) {
        $daysToAdd--;
    }
}

$result = date('Y-m-d', $currentTimestamp);
echo $result; // 输出:2018-04-23

方法二:使用DateTime类(更优雅)

PHP的DateTime类处理日期更面向对象,代码可读性更高:

$date = new DateTime('2018-04-20');
$daysToAdd = 1;

for ($i = 0; $i < $daysToAdd; $i++) {
    $date->modify('+1 day');
    // 如果碰到周六(6)或周日(7),就一直顺延到工作日
    while (in_array($date->format('N'), [6, 7])) {
        $date->modify('+1 day');
    }
}

echo $date->format('Y-m-d'); // 输出:2018-04-23

封装成可复用函数

如果需要多次使用,把逻辑封装成函数会更方便:

function addWorkDays(string $dateStr, int $days): string {
    $date = new DateTime($dateStr);
    for ($i = 0; $i < $days; $i++) {
        $date->modify('+1 day');
        while (in_array($date->format('N'), [6, 7])) {
            $date->modify('+1 day');
        }
    }
    return $date->format('Y-m-d');
}

// 调用示例
echo addWorkDays('2018-04-20', 1); // 2018-04-23
echo addWorkDays('2018-04-27', 2); // 2018-04-30(周五,因为28、29是周末)

补充说明

如果你的需求后续需要考虑法定节假日,可以在函数里加一个节假日数组,每次判断日期是否在数组里,如果是的话也顺延。不过根据你当前的描述,只需要排除周末,上面的代码就完全够用啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:15:25