2013-11-14 122 views
0

我正在構建腳本以檢測某些日期是否每年都會在週末出現。php確定日期範圍是否落在週末

25日和26日是銀行假期,如果他們週末倒下,下一個工作日是該銀行假日的替代品,其餘工作日爲工作日。

例如:如果25日是星期六和26日是星期日,27日和28日將是節假日,然後29日,30日,31日是工作日

如果25日是星期日,26日和27日,然後是銀行假期,28日,29日,30日將是工作日,31sy將是星期六。

這裏是我的日期:

date('25-12-Y'); 
date('26-12-Y'); 
date('27-12-Y'); 
date('28-12-Y'); 
date('29-12-Y'); 
date('30-12-Y'); 
date('31-12-Y'); 

我所創建的代碼是這樣的:(請注意$得到年VAR是測試不同年份)

function isWeekend($date) { 
    return (date('N', strtotime($date)) >= 6); 
} 
$getyear = 2013; 

echo '25 '; 
if (isWeekend(date('25-12-'.$getyear))){ 
    echo 'weekend'; 
} else { 
    echo 'bh'; 
}; 
echo '<br>'; 
echo '26 '; 
if (isWeekend(date('26-12-'.$getyear))){ 
    echo 'weekend'; 
} else { 
    echo 'bh'; 
}; 
echo '<br>'; 
echo '27 '; 
if (isWeekend(date('27-12-'.$getyear))){ 
    echo 'weekend'; 
} else { 
    echo 'leave'; 
}; 
echo '<br>'; 
echo '28 '; 
if (isWeekend(date('28-12-'.$getyear))){ 
    echo 'weekend'; 
} else { 
    echo 'leave'; 
}; 
echo '<br>'; 
echo '29 '; 
if (isWeekend(date('29-12-'.$getyear))){ 
    echo 'weekend'; 
} else { 
    echo 'leave'; 
}; 
echo '<br>'; 
echo '30 '; 
if (isWeekend(date('30-12-'.$getyear))){ 
    echo 'weekend'; 
} else { 
    echo 'leave'; 
}; 
echo '<br>'; 
echo '31 '; 
if (isWeekend(date('31-12-'.$getyear))){ 
    echo 'weekend'; 
} else { 
    echo 'leave'; 
}; 
echo '<br>'; 

我知道這可能是不最佳做法,所以我正在尋找另一種方法來解決這個問題。

+0

您可以從PHP中的某個日期獲取「當天的數字」。 0是星期日,1是星期一,依此類推。 cfr [this page](http://php.net/manual/en/function.date.php)獲取更多信息 –

回答

1
$dates = array(); 
$christmas_days = array(25, 26); 

$year = 2013; 

for ($day = 25; $day <= 31; $day++) 
{ 
    $dates[$day] = date($day . '-12-' . $year); 
} 



foreach ($dates as $day => $date) 
{ 
    echo $day . ' '; 
    if (isWeekend($date)) 
    { 
     echo 'weekend'; 
     if (in_array($day, $christmas_days)) 
     { 
      $bh_on_weekend++; 
     } 
    } 
    else 
    { 
     if ($bh_on_weekend > 0) 
     { 
      echo 'bh'; 
      $bh_on_weekend--; 
     } 
     else 
     { 
      if (in_array($day, $christmas_days)) 
      { 
       echo 'bh'; 
      } 
      else 
      { 
       echo 'leave'; 
      } 
     } 
    } 
    echo '<br>'; 
} 

function isWeekend($date) 
{ 
    return (date('N', strtotime($date)) >= 6); 
} 

試圖在乾燥的方式做盡可能少的重複。創建日期更具動態性。希望它以某種方式幫助你,或者給出一個想法,讓它與衆不同。

輸出2021

25 weekend 
26 weekend 
27 bh 
28 bh 
29 leave 
30 leave 
31 leave 
+0

感謝您的回答!當我將年份更改爲2015年時,我只獲得1個bh。這對於您來說是否一樣? – danyo

+0

我想我一般都會誤解你的問題。我沒有注意到週末25/26的事實..爲了在接下來的工作日得到bh。我會盡快解決它 – KURN

+0

感謝KURN,這將是一個很大的幫助! – danyo

0

您應該使用Carbon抽象所有的邏輯。

你可以再做:

$dt = Carbon::create(2013, 12, 25); 
$dt->isWeekday(); // bool 

的碳文檔非常好,所以我敢肯定,你就能找到你要找的東西。

+0

OP已經知道它是否在週末指定日期... –

相關問題