Учитывая две даты, как лучше всего узнать количество дней недели в PHP?

StackOverflow https://stackoverflow.com/questions/80541

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Например, как мне узнать, что между ними 10 недельных дней? 31/08/2008 и 13/09/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/

Другие советы

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

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

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

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

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

Расчетное время прибытия:Ой..Вы имели в виду будние дни, например, пн-пт..Не увидел этого сначала..

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top