Учитывая две даты, что является лучшим способом узнать количество дней недели в PHP? - PullRequest
1 голос
/ 17 сентября 2008

Название в значительной степени говорит само за себя. Учитывая две даты, как лучше всего определить количество дней недели с помощью PHP? Дни недели с понедельника по пятницу.

Например, как я узнаю, что между 10000 * и 13/09/2008?

есть 10 дней в неделю.

Ответы [ 4 ]

3 голосов
/ 17 сентября 2008
        $datefrom = strtotime($datefrom, 0);
        $dateto = strtotime($dateto, 0);

        $difference = $dateto - $datefrom;

        $days_difference = floor($difference / 86400);
        $weeks_difference = floor($days_difference / 7); // Complete weeks

        $first_day = date("w", $datefrom);
        $days_remainder = floor($days_difference % 7);

        $odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder?
        if ($odd_days > 7) { // Sunday
            $days_remainder--;
        }
        if ($odd_days > 6) { // Saturday
            $days_remainder--;
        }

        $datediff = ($weeks_difference * 5) + $days_remainder;

Отсюда: http://www.addedbytes.com/php/php-datediff-function/

2 голосов
/ 17 сентября 2008

Если вы создаете систему выставления счетов, вам нужно подумать о банковских праздниках, Пасхе и т. Д. Вычислить это не просто.

Лучшее решение, которое я когда-либо видел, состоит в том, чтобы предварительно сгенерировать таблицу с днями и ее типом в базе данных SQL (строка в день = 365 строк в год), а затем выполнить простой запрос подсчета с правильным выбором (предложение WHERE).

Вы можете найти это решение полностью описанным в Мышление Джо Селко в наборах: вспомогательные, временные и виртуальные таблицы в SQL

0 голосов
/ 17 сентября 2008

Лучший способ - перебрать все даты между заданным диапазоном дат и получить день недели для каждой даты. Если это день недели, увеличьте определенный счетчик. В конце процесса вы получите количество рабочих дней.

Функции PHP mktime () и date () (для работы с метками времени UNIX) здесь ваши друзья.

0 голосов
/ 17 сентября 2008

Один из способов - преобразовать даты в метки времени Unix, используя strtotime (...), вычтя результаты и разделив их на 86400 (24 * 60 * 60):

$dif_in_seconds = abs(strtotime($a) - strtotime($b));
$daysbetween = $dif_in_seconds / 86400;

ETA: Ох .. Ты имел в виду будни, как в пн-пт .. Сначала не видел этого ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...