Get Next Working Date, skip weekends and holidays
Here is another way of doing the same thing

&lt;?php

function getWDays($startDate,$holiday,$wDays) {

    // using + weekdays excludes weekends
    $new_date = date('Y-m-d', strtotime("{$startDate} +{$wDays} weekdays"));

    $holiday_ts = strtotime($holiday);

    // if holiday falls between start date and new date, then account for it
    if ($holiday_ts &gt;= strtotime($startDate) &amp;&amp; $holiday_ts &lt;= strtotime($new_date)) {

        // check if the holiday falls on a working day
        $h = date('w', $holiday_ts);
            if ($h != 0 &amp;&amp; $h != 6 ) {
            // holiday falls on a working day, add an extra working day
            $new_date = date('Y-m-d', strtotime("{$new_date} + 1 weekdays"));
        }
    }

    return $new_date;
}

// here is an example
$start = "2013-08-29";
$holiday = "2013-09-02";
$wDays = 3;

echo "Start: ",date("Y-m-d D", strtotime($start)),"&lt;br /&gt;";
echo "Holiday: ",date("Y-m-d D", strtotime($holiday)),"&lt;br /&gt;";
echo "WDays: $wDays&lt;br /&gt;";

echo getWDays($start, $holiday, $wDays);