nfTlWNl rn Ѻq$³*%yNk9S8jnM/=ƙ`_9Ogn&aIYuim#^Po!zҰp؏tL1FrgZ^N`3an^X:t .{cP%'^Zto;2xyG‘K_J JݩWłX ĢQ$3 ĢQ$3{6#3.hG>`@yJbS7h?s$RIM>#DF+ ĢQ$3dzq_BT[oŬn)IU 4^QUx6t ;GW}dDJO2]phoQ5)G,zԷ.kHuӄ_'ݻ,^#b1\ kO< ĢQ$3 ĢQ$3tR 'PFzHDP2ؑ= &< F(%rz?[Lہe1cAuk4zA ĢQ$3 q_4?V3^Ʈ]ucX%dre&;]"C+%YnTAFH!wT#G~eXV.7hZ*cP~a[w3SJ3$3^fR] pA^.T܄W.Sk~͒#:t%Z]dP%޴m_u(-Gq^$yNj67C Rm_Mp57s͠kڃo F275 vAGUNI"0>4L9{cI&T*x|nB?֢o*w:΀lkHaÝzJ.SԦaW%M)%t:,[: ~a@70=T;k\IƔX:7ϧ~,G`!2 ajm (X$a0U7y6DE+ {kjdI(We|2TZ0؂q9vqy67lxDQitIɤDS@ؿŏwbYCBq8?/.=OO'I66ҜטJvX1a+6F$8R#K^Œ06lءvɂ3_6xE\tFE@jsB;X9 "I,=Ggn::)FO=_nr_4QY`@.C=2Y٥l &$rMRysp5 N i/?cp:b-rFO1"R^u/(x_Hxq)a`Dg#t..)y>]Fiv0G (sY8W`i{</=:8z4|`Z3BC`a/8y,QKsS[ ӈ)NFى:/='߳Ȩ;/Hf,yIjqź%rT _'PY ě/Z3vM YYsc'2r}Ynim62K1 iYTX X#+_͵P>*'Ou$^("ْؕ+ewZRrjhnϥA0.Qaڣoo nr (a殌d磇>[j5EAxOhfpH~Jp9݂FniΗ`fC(UHelpers::returnIn3FormatsFloat($endDate); } private static function incrementingArray(float $startDate, float $endDate, array $holidayArray): float { $holidayCountedArray = $holidayDates = []; foreach ($holidayArray as $holidayDate) { if (self::getWeekDay($holidayDate, 3) < 5) { $holidayDates[] = $holidayDate; } } sort($holidayDates, SORT_NUMERIC); foreach ($holidayDates as $holidayDate) { if (($holidayDate >= $startDate) && ($holidayDate <= $endDate)) { if (!in_array($holidayDate, $holidayCountedArray)) { ++$endDate; $holidayCountedArray[] = $holidayDate; } } // Adjust the calculated end date if it falls over a weekend $endDoW = self::getWeekDay($endDate, 3); if ($endDoW >= 5) { $endDate += 7 - $endDoW; } } return $endDate; } /** * Use decrementing logic to determine Workday. * * @return mixed */ private static function decrementing(float $startDate, int $endDays, array $holidayArray) { // Adjust the start date if it falls over a weekend $startDoW = self::getWeekDay($startDate, 3); if ($startDoW >= 5) { $startDate += -$startDoW + 4; ++$endDays; } // Add endDays $endDate = (float) $startDate + ((int) ($endDays / 5) * 7); $endDays = $endDays % 5; while ($endDays < 0) { --$endDate; // Adjust the calculated end date if it falls over a weekend $endDow = self::getWeekDay($endDate, 3); if ($endDow >= 5) { $endDate += 4 - $endDow; } ++$endDays; } // Test any extra holiday parameters if (!empty($holidayArray)) { $endDate = self::decrementingArray($startDate, $endDate, $holidayArray); } return Helpers::returnIn3FormatsFloat($endDate); } private static function decrementingArray(float $startDate, float $endDate, array $holidayArray): float { $holidayCountedArray = $holidayDates = []; foreach ($holidayArray as $holidayDate) { if (self::getWeekDay($holidayDate, 3) < 5) { $holidayDates[] = $holidayDate; } } rsort($holidayDates, SORT_NUMERIC); foreach ($holidayDates as $holidayDate) { if (($holidayDate <= $startDate) && ($holidayDate >= $endDate)) { if (!in_array($holidayDate, $holidayCountedArray)) { --$endDate; $holidayCountedArray[] = $holidayDate; } } // Adjust the calculated end date if it falls over a weekend $endDoW = self::getWeekDay($endDate, 3); /** int $endDoW */ if ($endDoW >= 5) { $endDate += -$endDoW + 4; } } return $endDate; } private static function getWeekDay(float $date, int $wd): int { $result = Functions::scalar(Week::day($date, $wd)); return is_int($result) ? $result : -1; } }