<?php

$dateTime = DateTime::createFromFormat('d M Y', '12 Dec 2016');

var_dump(getWorkingDayAfterNDays($dateTime, 5));

function getWorkingDayAfterNDays(DateTime $dateTime, $n) {
    if ($n < 0) {
        throw new Exception('Число должно быть положительным ' . $n);
    }

    for ($i = 0; $i < 365; $i++) {
        $dateTime->modify('+1 day');
        if (!isDayOff($dateTime) && !isHoliday($dateTime)) {
            $n--;
            if ($n === 0) {
                return $dateTime;
            }
        }
    }

    throw new Exception('В году рабочих дней меньше, чем ' . $m);
}

// Выходной
function isDayOff(DateTime $dateTime) {
  // Суббота и воскресенье
  $daysOff = [6, 0];

  // w - Номер дня недели
  return in_array($dateTime->format('w'), $daysOff);
}

// Праздник
function isHoliday(DateTime $dateTime) {
    $holydays = [
        // День, месяц
        '19-12',
        '20-12',
    ];

    return in_array($dateTime->format('d-m'), $holydays);
}
