【问题标题】:PHP Business days stop at weekends create a new start date on mondayPHP 工作日在周末停止 在星期一创建一个新的开始日期
【发布时间】:2010-08-09 11:30:47
【问题描述】:

您好,我已经在使用另一个问题中的此代码 - 如果是周末,则会在结束日增加两天

function add_business_days($startdate,$buisnessdays,$holidays,$dateformat){
  $i=1;
  $dayx = strtotime($startdate);
  while($i < $buisnessdays){
   $day = date('N',$dayx);
   $datex = date('Y-m-d',$dayx);
   if($day < 6 && !in_array($datex,$holidays))$i++;
   $dayx = strtotime($datex.' +1 day');
  }
  return date($dateformat,$dayx);
 }

此函数构成 json 输出的一部分,显示在 jquery 日历中 - 它获取 startdate 和 enddate 并呈现它。

是否可以创建一个返回输出的代码,这样当它到达周末时它会创建一个结束日期,跳到星期一创建一个开始日期,然后继续直到它到达原来的给定结束日期??

x = date('w');
if (x != 6) {
while (x != 6) {
//start adding days to start date
}
} else {
//create new enddate = current iteration of dates currentdate;

//then new start (add two days to it to get to monday) currentdate + 2 = newstartdate
//redo above till you get to original end date

【问题讨论】:

  • 这个问题很混乱。也许您可以链接到前面的问题,以便为我们提供一些背景信息。

标签: php jquery datetime weekend


【解决方案1】:

我不是 100% 确定问题/功能真正在做什么,但(如果我猜对了)这是一个想法。

function add_business_days($startdate, $businessdays, $holidays, $dateformat)
{
    $start = new DateTime($startdate);
    $date  = new DateTime($startdate);
    $date->modify("+{$businessdays} weekdays");

    foreach ($holidays as $holiday) {
        $holiday = new DateTime($holiday);
        // If holiday is a weekday and occurs within $businessdays of the $startdate
        if ($holiday->format('N') < 6 && $holiday >= $start && $holiday <= $date) {
            $date->modify("+1 weekday");
        }
    }
    return $date->format($dateformat);
}

逻辑基本上是在开始日期加上$businessdaysweekdays;然后检查日期范围内的任何假期,如果确实发生了任何假期,那么最终日期会酌情增加。

【讨论】:

  • 嗨,谢谢 - 我想我实际上要采取不同的路线,我将使用 add_business_days 函数,该函数有效并从日历视图中隐藏周末 - 效果相同,麻烦更少。跨度>
猜你喜欢
  • 2012-11-27
  • 2019-11-21
  • 2012-04-27
  • 2022-12-11
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
相关资源
最近更新 更多