PHP的工作日(周一至周五)

有没有办法使用strtotime将工作日(星期一至星期五)添加到date? 或者其他一些方法? 我想要做的是:

 date ( 'Ymj' , strtotime ( '+3 working days' ) ) 

如果你限制到平日使用string星期几。

 echo date ( 'Ymj' , strtotime ( '3 weekdays' ) ); 

这应该提前3个工作日,所以如果是星期四,它会增加额外的周末时间。

资料来源: http : //www.php.net/manual/en/datetime.formats.relative.php

当需要大量的工作日时,我已经find了这辆车。 我正在寻找本月1日之后的X个工作日。

看起来不错,直到添加5个工作日后(类似于发现的@zerkms)。

这对我来说已经certificate了更准确。

  function _getBusinessDayOfMonth( $days ) { $time = strtotime(date("m/1/Y 00:00")); //finding # of business days after 1st of the month $i = 0; //start with zero while ($i < $days) { //loop through until reached the amount of weekdays $time = strtotime("+1 day", $time); //Increase day by 1 if (date("N", $time) < 6) { //test if MF $i++; //Increase by 1 } } echo date("m/d/Y", $time); } 

我觉得一个function可以很容易地开发,你可以导出当天的一周没有,你可以添加两个和国防部的5会给你轻松的工作日。

 function increaseWorkDay($workDayToProcess, $dayToAdd){ if($workDayToProcess >= 4 && $workDayToProcess <= 6){ $workDayToProcess= 4; } $workDayToProcess+= $dayToAdd; return $workDayToProcess % 5; } 

您可以使用数组导出星期几名称,也可以使用此方法。

我recursion地做,为我工作

 function add_work_days($date, $day){ if($day == 0) return $date; $date->add(new DateInterval('P1D')); if(!in_array($date->format('N'), array('6', '7'))) $day--; return add_work_days($date, $day); } $date = add_work_days(new DateTime(), 3); echo $date->format('d/m/Y'); 

对于旧版本的PHP <5.3

 function AddWorkingDays($startDate, $adddays) { $retdate = $startDate; $sign = "+"; if($adddays < 0){ $adddays = $adddays*-1; $sign = "-"; } while ($adddays > 0) { $retdate = date ( 'Ymd' , strtotime ( "$retdate {$sign}1 day" ) ); $what_day = date("N", strtotime($retdate)); if ( $what_day != 6 && $what_day != 7 ) // 6 and 7 are weekend $adddays--; }; return $retdate; }