Ir para conteúdo

POWERED BY:

Arquivado

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

Alisson Rodrigues

Alternativa para strptime

Recommended Posts

Fala galera, talvez alguns de vcs conheçam a função strptime. Pois bem, o fato é que ela não funciona em Windows. Pra quem está com prequiça de entrar no link, nesta função você informa uma data (ex: 1989-10-18) e indica o formato dela (para este caso: %Y-%m-%d), a função então retorna um array com essas info separados por indices.

 

Pensando numa função parecida, tive até algumas idéia para implementar. Primeiro, a função:

 

function strptime($date,$format,&$array="") {		 $regex = $format;		 $parts = explode("%",$format);		 $ordem = array();		 		 foreach($parts as $chave => $valor) {				 if ($chave==0) continue;				 $newKey = $valor[0];				 $ordem[$newKey] = $chave;		 }		 $regex = str_replace("%d","([0-9]{2})",$regex);		 $regex = str_replace("%m","([0-9]{2})",$regex);		 $regex = str_replace("%Y","([0-9]{4})",$regex);		 $regex = str_replace("%H","([0-9]{2})",$regex);		 $regex = str_replace("%M","([0-9]{2})",$regex);		 $regex = str_replace("%S","([0-9]{2})",$regex);		 		 preg_match("#^".$regex."$#",$date,$sobra);		 		 foreach($ordem as $chave2 => $valor2) {				 $$chave2 = $sobra[$valor2];		 }		 		 $array = array("d" => $d,"m" => $m,"Y" => $Y,"H" => $H,"M" => $M,"S" => $S);		 $time = mktime($H,$M,$S,$m,$d,$Y);		 		 return $time;}
int strptime ( string timestamp, string format [, array result] )

 

A função tem 3 argumentos, sendo 2 deles obrigatórios, e o outro uma referência. A função retorna um inteiro contendo o timestamp da data informada. timestamp deve ser uma string de data em qualquer formato, format é o formato da data informada em timestamp.

 

Pode ser dado um array result. Este array irá conter as informações da data dada em timestamp, com os identificadores da função strftime (d, m, Y, etc) sendo os índices.

 

Exemplo 1: Usando array como referência

$info = array();strptime("18/10/1989","%d/%m/%Y",$info);var_dump($info);
Produz:

array(6) {  ["d"]=>  string(2) "18"  ["m"]=>  string(2) "10"  ["Y"]=>  string(4) "1989"  ["H"]=>  NULL  ["M"]=>  NULL  ["S"]=>  NULL}
Exemplo 2: Convertendo uma data

print date("d/m/Y",strptime("1989-10-18""%Y-%m-%d"));
Produz:

18/10/1989
Obs.: A função ainda contém alguns bugs, que espero resolver em breve.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Modifiquei algumas coisas, corrigindo alguns bugs. E ainda, quando era passado apenas valores de data (dia, mês, ano) no array de referência era retornado o tempo em branco, agora simplesmente não retorna nada. Ficou um pouco menor ainda:

 

function strptime($date,$format,&$array="") {		 $regex = $format;		 $parts = explode("%",$format);		 $ordem = array();		 		 foreach($parts as $chave => $valor) {				 if ($chave==0) continue;				 $ordem[$valor[0]] = $chave;		 }		 $regex = ereg_replace("(%d|%m|%H|%M|%S)","([0-9]{2})",$regex);		 $regex = str_replace("%Y","([0-9]{4})",$regex);		 		 preg_match("#^".$regex."$#",$date,$sobra);		 		 foreach($ordem as $chave2 => $valor2) {				 $array[$chave2] = $$chave2 = $sobra[$valor2];		 }		 		 $time = mktime($H,$M,$S,$m,$d,$Y);		 		 return $time;}

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.