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

时间:2010-11-23 21:33:56

标签: php strtotime

有没有办法使用strtotime将工作日(周一到周五)添加到某个日期?还是其他一些方法?我想做的是:

date ( 'Y-m-j' , strtotime ( '+3 working days' ) )

7 个答案:

答案 0 :(得分:93)

如果你限制工作日使用字符串工作日。

echo date ( 'Y-m-j' , strtotime ( '3 weekdays' ) );

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

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

答案 1 :(得分:2)

我需要更多的工作日才发现这辆车。我正在寻找当月1日之后的X个工作日。

一开始看起来很棒,直到添加> 5个工作日(类似于@zerkms发现的)。

这对我来说更准确。

    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 M-F
                $i++; //Increase by 1
            }
        }
        echo date("m/d/Y", $time);
    }

答案 2 :(得分:2)

对于PHP&gt; = 5.6

public function addWorkingDays($date, $day)
{

    if (!($date instanceof \DateTime) || is_string($date)) {
        $date = new \DateTime($date);
    }

    if ($date instanceof \DateTime) {
        $newDate = clone $date;
    }

    if ($day == 0) {
        return $newDate;
    }

    $i = 1;

    while ($i <= abs($day)) {

        $newDate->modify(($day > 0 ? ' +' : ' -') . '1 day');

        $next_day_number = $newDate->format('N');

        if (!in_array($next_day_number, [6, 7])) {
            $i++;
        }

    }

    return $newDate;

}

答案 3 :(得分:0)

我认为可以轻松开发一个功能,你可以只输出当天的当天没有,你可以添加两个,5个mod可以让你在工作日轻松。

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

    return $workDayToProcess % 5;
}

您可以使用数组导出工作日名称,也可以使用此方法。

答案 4 :(得分:0)

我递归地做,为我工作

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');

答案 5 :(得分:0)

对于旧版本的PHP&lt; 5.3

function AddWorkingDays($startDate, $adddays)
{
  $retdate = $startDate;
  $sign = "+";
  if($adddays < 0){
    $adddays = $adddays*-1;
    $sign = "-";
  }
  while ($adddays > 0) {
    $retdate = date ( 'Y-m-d' , 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;

}

答案 6 :(得分:0)

您也可以这样做:

echo date_create()->modify("+3 weekdays")->format("Y-m-d");

请参阅:

https://www.php.net/manual/en/function.date-create.php

https://www.php.net/manual/en/datetime.modify.php