Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Maykel-ctba

[Resolvido] Conversão de datas com expressões regulares?

Recommended Posts

Olá galera!

 

Encontrei uma função que estava me servindo muito bem ao converter datas do padrão americano (Y-m-d) para o formato brasileiro (d-m-Y).

 

Porém, agora senti uma necessidade de adicionar o horário. Ao realizar um teste, vi que ele chega a formatar o horário junto, mas está exibindo de maneira errada. Como posso corrigir?

 

Função:

function dataBrasil($data)
{
	$data_nova = implode(preg_match("~\/~", $data) == 0 ? "/" : "-", array_reverse(explode(preg_match("~\/~", $data) == 0 ? "-" : "/", $data)));
	return $data_nova;
}

 

Data original: 2012-08-08 16:33:37

Data após conversão usando a função: 08 16:33:37/08/2012

Compartilhar este post


Link para o post
Compartilhar em outros sites

DateTime

 

/**
* Altera uma data para outro formato
* 
* @param string $date String contendo a data a ser formatada
* @param string $outputFormat Formato de saida
* @throws Exception Quando não puder converter a data
* @return string Data formatada
* @author Hugo Ferreira da Silva
*/
function parseDate($date, $outputFormat = 'd/m/Y'){
$formats = array(
	'd/m/Y',
	'd/m/Y H',
	'd/m/Y H:i',
	'd/m/Y H:i:s',
	'Y-m-d',
	'Y-m-d H',
	'Y-m-d H:i',
	'Y-m-d H:i:s',
);

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);
}

 

Testando:

 

$testDates = array(
'2012-10-30 00:00:00',
'06/01/1986 14',
'06/12/1983 14:30:10',
'1984-01-06 14:30:10',
);

foreach($testDates as $date){
echo parseDate($date, 'd/m/Y H:i:s'), PHP_EOL;
}

 

@braços e fique com Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que função linda! Quase chorei de emoção :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que função linda! Quase chorei de emoção :lol:

 

hehehe só não entendi se é sarcasmo ou se gostou mesmo :D

 

de qualquer forma, nunca usei ela em produção, fiz agora. Lembrei do lance do DateTime::createFromFormat.

 

@braços e fiquem com Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara não sei se o bruno tava fazendo hora.

 

mas eu achei essa função de data perfeita.

 

eu para inverter data usava um

 

$d = '2012-02-01';
$d = array_reverse(explode('-',$d));
$d = implode('/',$d);

 

mas depois dessa ai, do modo que fasso parece gambiarra :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que todo mundo acha que tudo que eu falo é gozação. :cry:

 

Achei muito bacana mesmo. :clap:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Expressões Regulares

 

/**
* Formata uma data para outra mascara sem usar o DateTime::createFromFormat
* 
* @param string $dateStr
* @param string $outputFormat
* @throws InvalidArgumentException
* @author Hugo Ferreira da Silva
* @return string
*/
function parseDate($dateStr, $outputFormat = 'd/m/Y'){
$regs = array(
	'@^(?<ano>\d{4})-(?<mes>\d{2})-(?<dia>\d{2})(?<hora>\s{1}\d{2})?(?<minuto>:\d{2})?(?<segundo>:\d{2})?$@',
	'@^(?<dia>\d{2})/(?<mes>\d{2})/(?<ano>\d{4})(?<hora>\s{1}\d{2})?(?<minuto>:\d{2})?(?<segundo>:\d{2})?$@',
);

foreach($regs as $regex){
	if(preg_match($regex, $dateStr, $reg)){
		$hora = empty($reg['hora']) ? 0 : $reg['hora'];
		$minuto = empty($reg['minuto']) ? 0 : str_replace(':', '', $reg['minuto']);
		$segundo = empty($reg['segundo']) ? 0 : str_replace(':', '', $reg['segundo']);

		$date = new DateTime();
		$date->setDate($reg['ano'], $reg['mes'], $reg['dia']);
		$date->setTime((float) $hora, (float) $minuto, (float) $segundo);

		return $date->format($outputFormat);
	}
}

throw new InvalidArgumentException('Invalid date value: '.$dateStr);
}

 

@braços e fiquem com Deus!

 

[Edit] Em tempo: DateTime funciona em 5.2, mas o método createFromFormat foi adicionado somente na versão 5.3.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.