2010-11-23 84 views
39

有沒有辦法使用strtotime將工作日(星期一至星期五)添加到日期?或者其他一些方法?我想要做的是:PHP中的工作日(週一至週五)

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

在一些中東國家,一個週末,每週工作時間爲週日至週四。你有沒有想過:O – 2010-11-23 21:36:27

+2

這是爲了計算未來幾天付款的最後期限是否爲本地活動,所以不要:-) – fredley 2010-11-23 21:37:56

回答

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); 
    } 
0

我覺得一個功能可以很容易地開發,你可以只導出當前每天不星期,你可以添加兩個和5國防部將讓你輕鬆工作日。

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

    return $workDayToProcess % 5; 
} 

而且您可以通過使用數組導出星期幾名稱,也可以使用此方法。

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

對於舊版本的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; 

} 
相關問題