31 public static function date($startDate, $endDays, ...$dateArgs)
39 foreach ($dateArgs as $holidayDate) {
43 return $e->getMessage();
46 $startDate = (float) floor($startDate);
47 $endDays = (int) floor($endDays);
53 return self::decrementing($startDate, $endDays, $holidayArray);
56 return self::incrementing($startDate, $endDays, $holidayArray);
64 private static function incrementing(
float $startDate,
int $endDays, array $holidayArray)
68 $startDoW = self::getWeekDay($startDate, 3);
69 if (self::getWeekDay($startDate, 3) >= 5) {
70 $startDate += 7 - $startDoW;
75 $endDate = (float) $startDate + ((
int) ($endDays / 5) * 7);
76 $endDays = $endDays % 5;
77 while ($endDays > 0) {
80 $endDow = self::getWeekDay($endDate, 3);
82 $endDate += 7 - $endDow;
88 if (!empty($holidayArray)) {
89 $endDate = self::incrementingArray($startDate, $endDate, $holidayArray);
95 private static function incrementingArray(
float $startDate,
float $endDate, array $holidayArray): float
97 $holidayCountedArray = $holidayDates = [];
98 foreach ($holidayArray as $holidayDate) {
99 if (self::getWeekDay($holidayDate, 3) < 5) {
100 $holidayDates[] = $holidayDate;
103 sort($holidayDates, SORT_NUMERIC);
104 foreach ($holidayDates as $holidayDate) {
105 if (($holidayDate >= $startDate) && ($holidayDate <= $endDate)) {
106 if (!in_array($holidayDate, $holidayCountedArray)) {
108 $holidayCountedArray[] = $holidayDate;
112 $endDoW = self::getWeekDay($endDate, 3);
114 $endDate += 7 - $endDoW;
126 private static function decrementing(
float $startDate,
int $endDays, array $holidayArray)
130 $startDoW = self::getWeekDay($startDate, 3);
131 if (self::getWeekDay($startDate, 3) >= 5) {
132 $startDate += -$startDoW + 4;
137 $endDate = (float) $startDate + ((
int) ($endDays / 5) * 7);
138 $endDays = $endDays % 5;
139 while ($endDays < 0) {
142 $endDow = self::getWeekDay($endDate, 3);
144 $endDate += 4 - $endDow;
150 if (!empty($holidayArray)) {
151 $endDate = self::decrementingArray($startDate, $endDate, $holidayArray);
157 private static function decrementingArray(
float $startDate,
float $endDate, array $holidayArray): float
159 $holidayCountedArray = $holidayDates = [];
160 foreach ($holidayArray as $holidayDate) {
161 if (self::getWeekDay($holidayDate, 3) < 5) {
162 $holidayDates[] = $holidayDate;
165 rsort($holidayDates, SORT_NUMERIC);
166 foreach ($holidayDates as $holidayDate) {
167 if (($holidayDate <= $startDate) && ($holidayDate >= $endDate)) {
168 if (!in_array($holidayDate, $holidayCountedArray)) {
170 $holidayCountedArray[] = $holidayDate;
174 $endDoW = self::getWeekDay($endDate, 3);
176 $endDate += -$endDoW + 4;
183 private static function getWeekDay(
float $date,
int $wd): int
static incrementing(float $startDate, int $endDays, array $holidayArray)
Use incrementing logic to determine Workday.
static flattenArray($array)
Convert a multi-dimensional array to a simple 1-dimensional array.
static incrementingArray(float $startDate, float $endDate, array $holidayArray)
static returnIn3FormatsFloat(float $excelDateValue)
Return result in one of three formats.
static day($dateValue, $style=1)
WEEKDAY.
static date($startDate, $endDays,... $dateArgs)
WORKDAY.
static getDateValue($dateValue, bool $allowBool=true)
getDateValue.
static decrementingArray(float $startDate, float $endDate, array $holidayArray)
static validateNumericNull($number)
Many functions accept null argument treated as 0.
static getWeekDay(float $date, int $wd)
static decrementing(float $startDate, int $endDays, array $holidayArray)
Use decrementing logic to determine Workday.