- var_dump: documentation ( source)
- in_array: documentation ( source)
<?php
class BusinessDaysCalculator {
const MONDAY = 1;
const TUESDAY = 2;
const WEDNESDAY = 3;
const THURSDAY = 4;
const FRIDAY = 5;
const SATURDAY = 6;
const SUNDAY = 7;
/**
* DateTime $startDate Date to start calculations from
* DateTime[] $holidays Array of holidays, holidays are no conisdered business days.
* int[] $nonBusinessDays Array of days of the week which are not business days.
*/
public function __construct(DateTime $startDate, array $holidays, array $nonBusinessDays) {
$this->date = $startDate;
$this->holidays = $holidays;
$this->nonBusinessDays = $nonBusinessDays;
}
public function addBusinessDays($howManyDays) {
$i = 0;
while ($i < $howManyDays) {
$this->date->modify("+1 day");
if ($this->isBusinessDay($date)) {
$i++;
}
}
}
public function getDate() {
return $this->date;
}
private function isBusinessDay(DateTime $date) {
if (in_array((int)$date->format('N'), $this->nonBusinessDays)) {
return false; //Date is a nonBusinessDay.
}
foreach ($this->nonBusinessDays as $day) {
if ($date->format('Y-m-d') == $day->format('Y-m-d')) {
return false; //Date is a holiday.
}
}
return true; //Date is a business day.
}
}
$calculator = new BusinessDaysCalculator(
new DateTime(), // Today
[new DateTime("2014-06-01"), new DateTime("2014-06-02")],
[BusinessDaysCalculator::SATURDAY, BusinessDaysCalculator::FRIDAY]
);
$calculator->addBusinessDays(3); // Add three business days
var_dump($calculator->getDate());