Создать массив рабочих дней - PullRequest
0 голосов
/ 21 января 2011

Мне нужен метод для создания массива «рабочих дней» в 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 ]

1 голос
/ 21 января 2011

Самым простым способом было бы создать цикл от начальной даты до конечной даты (необходимо преобразовать обе метки времени с помощью 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'));

?>

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

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

0 голосов
/ 21 января 2011

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

...