2011-01-21 3 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

ответ

1

Самый простой метод должен был бы создать цикл от даты начала до даты окончания (вы должны тайному как к отметкам времени через mktime, а затем добавить день (86400 секунд) для увеличения). Во внутренней части петли, вы бы преобразовать каждую дату в метку времени Unix (еще раз через mktime и т.д.), а затем использовать ...

date('N', $dayStamp) 

... чтобы получить день недели на указанную дату.

В качестве основного РЕАЛИЗАЦИЯ, это будет выглядеть так:

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

?> 

Однако вы, скорее всего, также необходимо исключить праздники банка и т.д., так что вы должны хранить такие исключения в таблице базы данных/lookup array и т. д., чтобы проверить их по мере необходимости.

Кстати, если вы используете версию PHP раньше 5.1.0, вы должны использовать date('w'... и соответственно настроить свои дни недели. (Это ведет отсчет от нуля вместо одного.)

0

с основами функции даты PHP вы можете сделать это, найдите время, чтобы прочитать документацию на PHP date

Смежные вопросы