fork download
  1. <?php
  2.  
  3. $dateTime = DateTime::createFromFormat('d M Y', '12 Dec 2016');
  4.  
  5. var_dump(getWorkingDayAfterNDays($dateTime, 5));
  6.  
  7. function getWorkingDayAfterNDays(DateTime $dateTime, $n) {
  8. if ($n < 0) {
  9. throw new Exception('Число должно быть положительным ' . $n);
  10. }
  11.  
  12. for ($i = 0; $i < 365; $i++) {
  13. $dateTime->modify('+1 day');
  14. if (!isDayOff($dateTime) && !isHoliday($dateTime)) {
  15. $n--;
  16. if ($n === 0) {
  17. return $dateTime;
  18. }
  19. }
  20. }
  21.  
  22. throw new Exception('В году рабочих дней меньше, чем ' . $m);
  23. }
  24.  
  25. // Выходной
  26. function isDayOff(DateTime $dateTime) {
  27. // Суббота и воскресенье
  28. $daysOff = [6, 0];
  29.  
  30. // w - Номер дня недели
  31. return in_array($dateTime->format('w'), $daysOff);
  32. }
  33.  
  34. // Праздник
  35. function isHoliday(DateTime $dateTime) {
  36. $holydays = [
  37. // День, месяц
  38. '19-12',
  39. '20-12',
  40. ];
  41.  
  42. return in_array($dateTime->format('d-m'), $holydays);
  43. }
  44.  
Success #stdin #stdout 0s 52488KB
stdin
Standard input is empty
stdout
object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2016-12-21 22:41:06.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(3) "UTC"
}