функция php при подсчете 30 дней, но без конца недели или праздника - PullRequest
0 голосов
/ 24 мая 2018

Мне нужна помощь.

Мне нужно создать функцию php на счет 30 дней.Но если последний день выходных или праздников.Поэтому я должен добавить дни, чтобы последний день был рабочим.30 дней не должны заканчиваться в выходные или праздничные дни. Я искал форумы и гугл, но ничего не нашел.Я нашел счет рабочих дней, но не то, что мне нужно.Спасибо за вашу помощь.

          $holiday = array(
            '01-01',
            '01-06',
            '03-30',
            '04-01',
            '04-02',
            '05-01',
            '05-08',
            '07-05',
            '08-29',
            '09-01',
            '09-15',
            '11-01',
            '11-17',
            '12-24',
            '12-25',
            '12-26',
          );

          $count = 0;
          $temp = strtotime($row['prijem']); //example as today is 2016-03-25
          while($count<30){
              $newdate = strtotime('+1 day', $temp);
              $nextnewdate = date('m-d', $newdate);
              if(!in_array($nextnewdate, $holiday)){
                  $count++;
              }
              $temp = $newdate;
          }

          $end = date("d.m.Y", $temp);

дата начала работы 24.05.2018, сегодня.конечная дата - 23.06.2018.

, и теперь мне нужно всегда, когда конечной датой является выходной или праздничный день, преобразованный в рабочий день.Так что если дата окончания суббота, то результат будет в понедельник 25.06.2018.И снова, если бы это был выходной, добавьте больше рабочих дней в рабочий день.

1 Ответ

0 голосов
/ 24 мая 2018

Нет необходимости в этом цикле, так как вам важно только, если 30-й день - рабочий день или нет (вместо того, чтобы заботиться, если каждый день между ними).Просто добавьте 30 дней напрямую, а затем проверьте результат.

$holidays = array(
            '01-01',
            '01-06',
            '03-30',
            '04-01',
            '04-02',
            '05-01',
            '05-08',
            '07-05',
            '08-29',
            '09-01',
            '09-15',
            '11-01',
            '11-17',
            '12-24',
            '12-25',
            '12-26',
          );

// the starting date, $row['prijem'] in your example
$temp = strtotime("2016-03-25");

// add 30 days to the starting date
$plus30days = strtotime("+30 days", $temp);

// while the end date is a holiday or weekend, add another day
// do this check until the end date is _not_ a weekend or holiday
while(in_array(date("m-d", $plus30days), $holidays) || date('N', $plus30days) >= 6)
{
    $plus30days = strtotime("+1 day", $plus30days);
}

echo date("d.m.Y", $plus30days);

DEMO

...