Untitled
unknown
plain_text
2 years ago
1.7 kB
6
Indexable
function parseDate($date, $outputFormat = 'd/m/Y'){ $formats = array( 'd/m/y', 'd/m/Y' ); foreach($formats as $format){ $dateObj = \DateTime::createFromFormat($format, $date); if($dateObj !== false){ break; } } if($dateObj === false){ throw new Exception('Invalid date:' . $date); } return $dateObj->format($outputFormat); } function findLatestDate($string) { $regex = '/\b((0?[1-9]|[12]\d|3[01])[\.\/](0?[1-9]|1[0-2])[\.\/]\d{2}(\d{2})?)|((0?[1-9]|[12]\d|30)[\.\/](0?[469]|11)[\.\/]\d{2}(\d{2})?)|((0?[1-9]|1\d|2[0-8])[\.\/]0?2[\.\/]\d{2}(\d{2})?)|((0?[1-9]|1\d|2[0-9])[\.\/]0?2[\.\/]((19|[2-9]\d)\d{2}))|((0?[1-9]|[12]\d|3[01])[\.\/](0?[13578]|1[02])[\.\/]((1[6-9]|[2-9]\d)\d{2}))|((0?[1-9]|[12]\d|30)[\.\/]0?2[\.\/]((1[6-9]|[2-9]\d)\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\/]0?2[\.\/]((1[6-9]|[2-9]\d)\d{2}))\b/'; $todasAsDatas = []; preg_match_all($regex, $string, $matches); $dataMaisRecente = null; foreach($matches[0] as $match) { $match = $this->parseDate($match); $dataAtual = \DateTime::createFromFormat('d/m/Y', $match, new \DateTimeZone('America/Sao_Paulo')); if ($dataAtual > $dataMaisRecente || $dataMaisRecente === null) { $dataMaisRecente = $dataAtual; } $todasAsDatas[] = $match; } if ($dataMaisRecente !== null) { return $dataMaisRecente->format('Y-m-d'); } else { return null; } }
Editor is loading...