Untitled

 avatar
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...