/** * Função que converte uma data em timestamp. Funcionamento semelhante a strotime * com a adição de suporte a correta conversão de datas no formato brasileiro, * datas passadas sem separadores (muito comum em sistemas bancários) * e datas com valor zerado (data nula no MySQL por exemplo) * @param string $data * @return int */ static public function _strtotime($data=null){ if ($data==NULL) return NULL; $data = preg_replace("#[\/]+0?#","-",$data); if(strlen($data)<8){ $data = preg_replace("#^(\d+)\D(\d+)\D(\d+)$#","$3-$2-$1",$data); } return strtotime($data,time()); } /** * Converte uma data passada em qualquer formato para um formato de saída * Obs.: Datas passadas com separadores (Qualquer Caracter não numérico) * Têm mais chances de ser convertida corretamente * Datas sem separadores serão tratados como DiaMesAno caso * não seja passado o formato da data passada * Exemplos.: * converterData('2008/03/16') retorna 16/03/2008 * converterData('2008-3-16') retorna 16/03/2008 * converterData('2008-3-16',dmY) retorna 16032008 * converterData('20080316') retorna 16/03/2008 * converterData('16032008') retorna 31/12/1969 (falha porque tenta usar a data como 1603/20/08) * converterData('16032008','Ymd','dmY') retorna 16032008 * converterData('16032008','r','dmY') * converterData('16032008','r','dmY') * Sun, 16 Mar 2008 00:00:00 -0300 * @param string {data} A data a ser convertida * @param string {mascara} A máscara de saída da função (Utiliza a sintaxe de date()) * @param string {formato} Define como a data passada deve ser tratada caso a * data seja passada sem separadores (Utilizar o formato de datas GNU) */ function converterData($data,$mascara='d/m/Y',$formato='Ymd'){ if(!preg_match("#^\d(1,2)\D\d{1,2}\D\d{1,2}$#",$data) && preg_match("#\D#",$data)){ $stamp = _strtotime($data,time()); }else{ $trans = array('d'=>'(\d{2})', 'm'=>'(\d{2})', 'y'=>'(\d{1,2})', 'Y'=>'(\d{2,4})'); $replace = str_replace('d','$3',$formato); $replace =str_replace('m','$2',$replace); $replace =str_replace('Y','$1',$replace); $replace =str_replace('y','$1',$replace); $regex = strtr($formato,$trans); $dt = preg_replace("#$regex#","$replace",$data); $stamp = strtotime($dt,time()); } return date($mascara,$stamp); }