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
相关产品推荐
相关产品推荐

