2017-05-05 66 views
2

我正在創建一個調度程序腳本,如果我今天執行任務,我的下一個任務將從今天開始6個月(半年度),但我的問題是人們沒有任何活動因此週日必須在星期一進行調整。如何添加日期+ 6個月,但使用PHP排除星期日

如何添加6個月到今天的日期,但不包括週日,我正在使用PHP並能夠使用以下代碼添加6個月至今。

我的代碼是這樣的。

<?php echo date('Y-m-d', strtotime('+6 months'));?> 
+0

這或許有助於http://stackoverflow.com/questions/2332681/add-number-of-days-to -a-date –

+2

echo getdate(strtotime('+ 6 months'))['wday'] == 0?日期('Y-m-d',strtotime('+ 6個月1天')):日期('Y-m-d',strtotime('+ 6個月'));只需一行。如果你增加6個月的時間是星期日,我想你會想要提前一天。 – blokeish

+0

@blokeish這是最簡單的,它工作謝謝! – KaoriYui

回答

0

PHP.net date() documentation中所述,您可以檢查具體的日期編號。

因此,使用這些知識,您可以:

if (date("w", strtotime("+6 months")) == 0) { 
     echo date("Y-m-d", strtotime("+6 months +1 days")); 
    } 
    else { 
     echo date("Y-m-d", "+6 months"); 
    } 

或東西在比拉爾·艾哈邁德的答案的線路使用開關

switch (date("w", strtotime("+6 months")) == 0) { 
     case 0: // Sunday 
      echo date("Y-m-d", strtotime("+6 months +1 days")); 
     break; 
     case 1: // Monday 
     case 2: // Tuesday 
     case 3: // Wednesday 
     case 4: // Thursday 
     case 5: // Friday 
     case 6: // Saturday 
      echo date("Y-m-d", "+6 months"); 
     break; 
    } 

如果有適合做可能會更好每次不同的日子,date()將不會執行每次你執行的情況下。 (注:我沒有比較的速度)

編輯:oneliner基礎上,blokish對提問者發佈

echo date("w", strtotime("+6 months")) == 0 ? date("Y-m-d", "+6 months +1 days") : date("Y-m-d", "+6 months"); 
0

這是一個小功能。從日期和結束日期只是通過

<?php 

     function number_of_working_days($from, $to) { 
      $workingDays = [1, 2, 3, 4, 5, 6]; # date format = N (1 = Monday, ...) 

      $from = new DateTime($from); 
      $to = new DateTime($to); 
      $to->modify('+1 day'); 
      $interval = new DateInterval('P1D'); 
      $periods = new DatePeriod($from, $interval, $to); 

      $days = 0; 
      foreach ($periods as $period) { 
       if (!in_array($period->format('N'), $workingDays)) continue; 
       $days++; 
      } 
      return $days; 
     } 

echo number_of_working_days('2017-05-06', '2017-05-08'); 


     ?> 
0

完整的答案就在這裏: -

function daysToAdd($startDate,$endDate) 
{ 
$count=0; 
While($startDate!=$endDate){ 
$lpcnt=0; 
$begin = new DateTime($startDate); 
$end = new DateTime($endDate); 
$interval = DateInterval::createFromDateString('1 day'); 
$period = new DatePeriod($begin, $interval, $end); 
foreach ($period as $dt){ 
    if($dt->format("l")=='Sunday'){ 
     $count++; 
     $lpcnt++; 
    } 
} 
$day = date('D', strtotime($endDate)); 
if($day=='Sun'){ 
    $count=$count+1; 
    $lpcnt=$lpcnt+1; 
} 
$startDate=date('Y-m-d', strtotime($endDate . ' +1 day')); 
$endDate=date('Y-m-d', strtotime($endDate . ' +'.$lpcnt.' day')); 
if($startDate!=$endDate){ 
    daysToAdd($startDate,$endDate); 
}else{ 
    if(date('D', strtotime($startDate))=='Sun') { 
     $count=$count+1; 
     break; 
    } 
} 
} 
return $count; 
} 
$currentDate=date('Y-m-d'); 
$postSixMonth=date('Y-m-d', strtotime("+5 months")); 
$daysToadd=daysToAdd($currentDate,$postSixMonth); 
$requiredDate=date('Y-m-d', strtotime($postSixMonth . ' +'.$daysToadd.' days')); 
echo $requiredDate;exit; 
+0

可能是我,但這不是一點點實踐只是增加了一天,現在的加6個月是星期天? – Jelmergu

+0

@Jelmergu:案件已經處理完畢,請再次檢查一次。 –