<?php
class BusinessDaysCalculator {
const MONDAY = 1;
const TUESDAY = 2;
const WEDNESDAY = 3;
const THURSDAY = 4;
const FRIDAY = 5;
const SATURDAY = 6;
const SUNDAY = 7;
/**
* @param DateTime $startDate Date to start calculations from
* @param DateTime[] $holidays Array of holidays, holidays are no conisdered business days.
* @param 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($this->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->holidays as $day) {
if ($date->format('d-m-Y') == $day->format('d-m-Y')) {
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(4); // Add three business days
var_dump($calculator->getDate());
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.007652"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.010087"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.3.4
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.007707"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.3.3
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.007033"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.3.2
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.003821"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.3.1
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.004024"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.3.0
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.004040"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.18
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.010353"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.17
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.010448"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.16
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.006864"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.15
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.003908"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.14
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.003879"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.13
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.003615"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.12
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.003785"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.11
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.004508"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.10
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.005429"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.9
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.003939"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.8
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.003824"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.7
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.004044"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.6
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.003854"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.5
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.004110"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.4
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.003859"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.3
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.003959"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.2
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.003602"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.1
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.003851"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
Output for 8.2.0
Deprecated: Creation of dynamic property BusinessDaysCalculator::$date is deprecated in /in/Gjh7a on line 19
Deprecated: Creation of dynamic property BusinessDaysCalculator::$holidays is deprecated in /in/Gjh7a on line 20
Deprecated: Creation of dynamic property BusinessDaysCalculator::$nonBusinessDays is deprecated in /in/Gjh7a on line 21
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-07-05 22:00:18.003734"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}