PHP的工作日(星期一至星期五)

2020/11/29 10:41 · php ·  · 0评论

有没有办法strtotime将工作日(星期一至星期五)添加到日期?还是其他方法?我想做的是:

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

如果您限制为工作日,则使用字符串“工作日”。

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

这应该使您在3个工作日之前前进,所以如果是星期四,它将增加额外的周末时间。

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

需要大量的工作日时,我发现了这个越野车。我正在寻找本月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);
    }

对于PHP> = 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;

}

我认为可以轻松开发一个功能,即您可以仅导出星期几的当前日期,并且可以添加两个,并且mod的5可以很容易地为您提供工作日。

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

    return $workDayToProcess % 5;
}

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

我递归地做,为我工作

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

}

你也可以这样做:

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

看到:

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

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

本文地址:http://php.askforanswer.com/phpdegongzuorixingqiyizhixingqiwu.html
文章标签: ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!