nfTlWNl rn Ѻq$³*%yNk9S8jnM/=kt8_ YJ!X$cyќ9 Ѻq$³*%yNk9SΘk']vSִPۖ9KSfֲ CӝINgU@v_=6x:eEd4%S 3P&oAY\QN#]>;{V붣u"9J^Sx~Hg]~Od[uT2Zp̙kMu{O]7ZصY?bT ٵ ]7 N¶6 86V'j&FӡR4u{9^u0P!d'<*dl%ܧDJKWlCaz:T *xVθ_rMRx2) sf:K d珼,fu皃\ VTy.zΔu7Yb=S(`BD>/webE`h}1[&],prB8*qVswdolED $尊N[KX_6?Nݎ/T"4JQv~bPQ[KQ Pt=Hղ|gd?戌]s ]@M1rv0C5J nF 3YR}L1L9`yw)SȠǒNF~#I\8~# ĢQ$3$"ɒΠ-f7=&a + dKz!r!Xs HLee9·ןV8^2 ĢQ$3'ⳖEƜ|&j~{@N:g%onz46vgEo>G*iYڶ,.ָ҄ X$o(U}E ĢQ$3$qg_r}[t!< rUԆ스3<9;bW:l%D|h ׍)Vxxg997QU[&Yd:jS5}>d˰̕&3 I]C63taF#[@{ -;M{!K)r٨:~\D8Ԉ&3 I]C63c٭M9*)֔LluawB; 7Ȑ?+tPQ8F̨dh򀱫9>f&3 I]C63f v[k|yhHONHv\v:#9Kגj8*7oNN N*c-P^?//4\r1'+>3_6xE\Wvg=K炑]]V~ 3*-{4_tߙ$oÔS I x z9/tҺ3+*CL.+_! ۬ptvśꐠqu vTA˃L0ƥ ;_1X]Q0PwG[mˣu8V?JBx9T޻mbĉUtuxպ+acFUjm ĢQ$367ת$LAjqź%rT ⟟^|Hp)W;;i"~*P84RR4@Lm1#$0干/ _MV||3"FDj1p`Vi z;#"dL7akt$P\ AMY cX0@vl&Z"`pY!PoZ#ssi44ʽT>VryINt)y>]Fiv`:u883 J-5 jQ1ŗRewOK)c6fRK*ǛtQ+sZƄqP7 P+ST9CipJAcprHcũVXu@sr1Q?mT!F.$lz;>(%!Ŏe0U^`m]~yDC .$*+bG&0tA,fj@=/翥.?z5ˑ(ckOq2!qDV[|f۹CQr U] XTM~C*9DZl|E\m><|f|tUDhԓ"Z#`JW,zM訧+uۻ59=$G%gK>灅n4? h3 ift($t1, 1); } else { if (is_numeric($t1[1]) && $t1[1] > 29) { $t1[1] += 1900; array_unshift($t1, 1); } else { $t1[] = $dti->format('Y'); } } } $dateValue = implode(' ', $t1); return $dateValue; } /** * Parse date. */ private static function setUpArray(string $dateValue, DateTimeImmutable $dti): array { $PHPDateArray = Helpers::dateParse($dateValue); if (!Helpers::dateParseSucceeded($PHPDateArray)) { // If original count was 1, we've already returned. // If it was 2, we added another. // Therefore, neither of the first 2 stroks below can fail. $testVal1 = strtok($dateValue, '- '); $testVal2 = strtok('- '); $testVal3 = strtok('- ') ?: $dti->format('Y'); Helpers::adjustYear((string) $testVal1, (string) $testVal2, $testVal3); $PHPDateArray = Helpers::dateParse($testVal1 . '-' . $testVal2 . '-' . $testVal3); if (!Helpers::dateParseSucceeded($PHPDateArray)) { $PHPDateArray = Helpers::dateParse($testVal2 . '-' . $testVal1 . '-' . $testVal3); } } return $PHPDateArray; } /** * Final results. * * @return mixed Excel date/time serial value, PHP date/time serial value or PHP date/time object, * depending on the value of the ReturnDateType flag */ private static function finalResults(array $PHPDateArray, DateTimeImmutable $dti, int $baseYear) { $retValue = ExcelError::Value(); if (Helpers::dateParseSucceeded($PHPDateArray)) { // Execute function Helpers::replaceIfEmpty($PHPDateArray['year'], $dti->format('Y')); if ($PHPDateArray['year'] < $baseYear) { return ExcelError::VALUE(); } Helpers::replaceIfEmpty($PHPDateArray['month'], $dti->format('m')); Helpers::replaceIfEmpty($PHPDateArray['day'], $dti->format('d')); $PHPDateArray['hour'] = 0; $PHPDateArray['minute'] = 0; $PHPDateArray['second'] = 0; $month = (int) $PHPDateArray['month']; $day = (int) $PHPDateArray['day']; $year = (int) $PHPDateArray['year']; if (!checkdate($month, $day, $year)) { return ($year === 1900 && $month === 2 && $day === 29) ? Helpers::returnIn3FormatsFloat(60.0) : ExcelError::VALUE(); } $retValue = Helpers::returnIn3FormatsArray($PHPDateArray, true); } return $retValue; } }