Перейти к содержимому


Учет только рабочих дней в вычислении


Сообщений в теме: 7

#1 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 13 Январь 2016 - 16:07

Есть необходимость обозначать дедлайн по срокам.
Например:

$line['Дедлайн проекта'] = date("Y-m-d", strtotime($line['Время добавления']) + 60*60*24*30);

Однако, здесь учитываются календарные дни.

Есть ли какая либо возможность учитывать только рабочие дни?

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 13 Январь 2016 - 16:42

Возможность есть, но алгоритм там не такой простой. Например, можно в цикле проходить по одному дню и проверять, выходной он или нет. Если не выходной - прибавлять к общей сумме дней.

#3 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 13 Январь 2016 - 16:45

а какого либо примера нет?

Имею ввиду хотя бы каким образом проверять выходной он или нет.
С подсчетом суммы и прибавлением к ней думаю вопросов не возникнет

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 13 Январь 2016 - 16:51

Просмотр сообщенияfabrika-r (13 Январь 2016 - 16:45) писал:

Имею ввиду хотя бы каким образом проверять выходной он или нет.

http://php.net/manua...nction.date.php

Например, date("w", $time) выдаст номер дня недели, и если он равен 0 или 6 - то это выходной. В переменной $time должен быть проверяемый день (в timestamp формате разумеется).

#5 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 13 Январь 2016 - 16:56

Спасибо, буду разбираться)
А праздники соответственно никак нельзя определить автоматически? Только задать вручную наверное можно?

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 13 Январь 2016 - 17:03

Праздники разумеется нет, т.к. date не в курсе когда у нас праздники. Либо вручную в коде задавать, либо создать табличку и сверяться с ней.

#7 Radik

    Активный участник

  • Пользователи
  • PipPipPip
  • 117 сообщений

Отправлено 13 Январь 2016 - 17:55

// время без выходных
if ($line['поле с датой внесенной'] > date("2010-01-01 00:00:00"))
{

$start_date = strtotime($line['начальная дата']);
$end_date = strtotime($line['конечная дата']);

$workdays = 0;
$holydays = 0;

while ($start_date < $end_date)
{
if (date("w", $start_date) == 0 || date("w", $start_date) == 6)
$holydays += 1;
else
$workdays += 1;
$start_date += 60 * 60 * 24;
}
//


$line['длительность'] = (strtotime($line['конечная дата']) - strtotime($line['начальная дата']))/3600 - $holydays*24;
};

#8 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 14 Январь 2016 - 10:51

Спасибо!





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных