2011-01-21 7 views
0

PHPで「営業日」の配列を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

答えて

1

最も簡単な手法は、終了日まで、開始日からループを作成することです(あなたがひそか必要があります両方ともタイムスタンプにmktime経由で追加して、増分に1日(86400秒)を追加します)。ループの内側の部分では、曜日を取得するには... ...

date('N', $dayStamp) 

を(mktimeなどを経て、再び)Unixタイムスタンプに各日付を変換してから使用したいです問題の日付について基本implementionとして

、これは次のようになります。あなたは、データベースのテーブルにこのような例外を保存する必要がありますので

<?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'...を使用し、それに応じて曜日を調整する必要があります。 (それはゼロの代わりに、1からカウントします。)

0

を基礎PHPの日付関数を使用すると、それは、ちょうど月 - 金(営業日としての資格、または何PHP date

関連する問題