title: PHP Add two hours to a date within given hours using function
body: <p>How would I structure the conditions to add two hours only to dates between 08:30 in the morning until 18:30 of the evening, excluding Saturday and Sunday?</p>
  
  <p>In the case that a time near the border (e.g. 17:30 on Tuesday) is given, the left over time should be added to the beginning of the next "valid" time period.</p>
  
  <p>For example: if the given date was in 17:30 on Tuesday, the two hour addition would result in 9:30 on Wednesday (17:30 + 1 hour = 18:30, 8:30 + the remainder 1 hour = 9:30). Or if the given date was in 17:00 on Friday, the result would be 9:00 on Monday (17:00 Friday + 1.5 hours = 18:30, 8:30 Monday + the remainder .5 hours = 9:00)</p>
  
  <p>I know how to simply add two hours, as follows:</p>
  
  <pre><code>$idate1 = strtotime($_POST['date']);
  $time1 = date('Y-m-d G:i', strtotime('+120 minutes', $idate1));
  $_POST['due_date']  = $time1;
  </code></pre>
  
  <p>i have tried this this function and it works great except when i use a date like ( 2013-11-26 12:30 ) he gives me ( 2013-11-27 04:30:00 ) 
  the problem is with 12:30</p>
  
  <pre><code>function addRollover($givenDate, $addtime) {
      $starttime = 8.5*60; //Start time in minutes (decimal hours * 60)
      $endtime = 18.5*60; //End time in minutes (decimal hours * 60)
  
      $givenDate = strtotime($givenDate);
  
      //Get just the day portion of the given time
      $givenDay = strtotime('today', $givenDate);
      //Calculate what the end of today's period is
      $maxToday = strtotime("+$endtime minutes", $givenDay);
      //Calculate the start of the next period
      $nextPeriod = strtotime("tomorrow", $givenDay); //Set it to the next day
      $nextPeriod = strtotime("+$starttime minutes", $nextPeriod);  //And add the starting time
      //If it's the weekend, bump it to Monday
      if(date("D", $nextPeriod) == "Sat") {
          $nextPeriod = strtotime("+2 days", $nextPeriod);
      }
  
      //Add the time period to the new day
      $newDate = strtotime("+$addtime", $givenDate);
      //print "$givenDate -&gt; $newDate\n";
      //print "$maxToday\n";
      //Get the new hour as a decimal (adding minutes/60)
      $hourfrac = date('H',$newDate) + date('i',$newDate)/60;
      //print "$hourfrac\n";
  
      //Check if we're outside the range needed
      if($hourfrac &lt; $starttime || $hourfrac &gt; $endtime) {
          //We're outside the range, find the remainder and add it on
          $remainder = $newDate - $maxToday;
          //print "$remainder\n";
          $newDate = $nextPeriod + $remainder;
      }
  
      return $newDate;
  }
  </code></pre>