2011-01-21 163 views
0

我需要一種在PHP beteewn 2日期中創建「工作日」數組的方法。創建一個工作日陣列

例如:

getWorkingDays("2008-01-01","2009-06-30"); 

將創建類似如下的數組:

Array 
(
    [0] ="2008-01-01", 
    [1] ="2008-01-05", 
    [2] ="2008-01-06", 
    [3] ="2008-01-07", 
    [4] ="2008-01-08", 
    [5] ="2008-01-09", 
    [6] ="2008-01-12", 
    [7] ="2008-01-13", 
    [8] ="2008-01-14", 
    ... 
) 
+2

什麼資格作爲一個營業日(只是週一至週五,或閱讀文檔是否也排除了其他日子?) – Hamish 2011-01-21 18:10:41

回答

1

最簡單的方法是創建從起始日期到結束日期的循環(你應該隱蔽都通過mktime時間戳,然後添加一天(86400秒)增量)。在循環的內部,你會每個日期轉換爲Unix時間戳(再次通過mktime等),然後使用...

date('N', $dayStamp) 

...拿到星期幾有關日期。

作爲一個基本的FPGA實現,這將是這樣的:

<?php 

    function getWorkingDays($startDate, $endDate) { 

     $businessDays = array(); 
     $businessDaysInWeek = range(1,5);  // Only Monday to Friday 

     // Decompose the provided dates.   
     list($startYear, $startMonth, $startDay) = explode('-', $startDate); 
     list($endYear, $endMonth, $endDay) = explode('-', $endDate); 

     // Create our start and end timestamps. 
     $startStamp = mktime(1, 1, 1, $startMonth, $startDay, $startYear); 
     $endStamp = mktime(1, 1, 1, $endMonth, $endDay, $endYear); 

     // Check each day in turn. 
     for($loop=$startStamp; $loop<=$endStamp; $loop+=86400) { 
      if(in_array(date('N', $loop), $businessDaysInWeek)) { 

       // You'll also want to omit bank holidays, etc. in here. 

       $businessDays[] = date('Y-m-d', $loop); 
      } 
     } 

     return $businessDays; 
    } 

    print_r(getWorkingDays('2011-01-10', '2011-01-24')); 

?> 

然而,你很可能還需要省略節假日等,所以你應該在數據庫表這樣的例外存儲/查找數組等等,以便適當地檢查它們。順便提一下,如果您使用的是早於5.1.0的PHP版本,則應該使用date('w'...並相應地調整您的星期幾。 (它從零,而不是一個計數。)

0

的基本知識的PHP日期函數,你可以把它,花時間在PHP date