Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, tenho que mostrar quanto tempo por extenção a partir de uma hora informada..
Por exemplo, tenho esta hora:
0:55:01.16
Teria que mostrar:
2 Dias , 8 horas e 56 minutos e 1 segundo
Este é um exemplo,
Alguem teria uma funcao que faz isso sozinho??
Seria para mostrar a duração disso , mas escrito...
Dá uma olhada nesse post, acho que irá te servir amigo
Mostrar anos, meses, dias, horas, minutos, segundos
Abraços....
Boa sorte!!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
>
Pessoal, tenho que mostrar quanto tempo por extenção a partir de uma hora informada..
Por exemplo, tenho esta hora:
0:55:01.16
Teria que mostrar:
2 Dias , 8 horas e 56 minutos e 1 segundo
Este é um exemplo,
Alguem teria uma funcao que faz isso sozinho??
Seria para mostrar a duração disso , mas escrito...
Bom amigo, na thread http://forum.imasters.com.br/index.php?/topic/358255-converter-timestick-para-segundos/ eu lhe passei a solução para isso, mas vamos lá:
0:55:01.16
Nessa hora que você passou são exatamente 55 minutos e 1 segundo e não 2 dias, 8 horas.....
Para você mostrar o tempo na string que você precisa, primeiro você precisa converter esse tempo em um valor conhecido pelo PHP. Para facilitar as coisas, vamos trabalhar com timestamp:
/**
* Converte uma string representando uma hora no equivalente Unix Timestamp
* @param string $time A string que será convertida no formato hh:mm:ss
* @return integer Unix Timestamp para a hora especificada
*/
function time2uts( $time ){
$mtc = array();
$uts = mktime();
if ( preg_match( "/(\d+):(\d{2}):(\d{2})/" , $time , $mtc ) ){
$uts -= ( (int) $mtc[ 1 ] ) * 3600;
$uts -= ( (int) $mtc[ 2 ] ) * 60;
$uts -= ( (int) $mtc[ 3 ] );
}
return( $uts );
}
A função acima irá converter sua string no formato h+:mm:ss em um inteiro representando o unix timestamp equivalente à hora passada, por exemplo:
var_dump( time2uts( "0:55:01.16" ) ); //int(1250465735)
Depois de converter sua string em um timestamp você poderá trabalhar com as funções de data e hora nativas do PHP:
/**
* Retorna a diferença entre duas datas (Unix Timestamp) por extenso
* @param integer $start A data inicial (Unix Timestamp)
* @param integer $end A data final (Unix Timestamp)
* @return string A diferença entre as duas datas
*/
function diffstr( $start , $end = null ){
$ret = "";
$arr = array();
$mtc = array();
$uts = $start == null ? mktime() : (int) $start;
$ute = $end == null ? mktime() : (int) $end;
if ( $uts > $ute ){
$aux = $uts;
$uts = $ute;
$ute = $aux;
}
$odt = new Datetime( strftime( "%Y-%m-%d %H:%M:%S" , $uts ) );
$now = new Datetime( strftime( "%Y-%m-%d %H:%M:%S" , $ute ) );
$dif = $now->diff( $odt );
if ( $dif->y ) $arr[] = sprintf( "%d ano%s" , $dif->y , $dif->y > 1 ? "s" : "" );
if ( $dif->m ) $arr[] = sprintf( "%d mes%s" , $dif->m , $dif->m > 1 ? "es" : "" );
if ( $dif->d ) $arr[] = sprintf( "%d dia%s" , $dif->d , $dif->d > 1 ? "s" : "" );
if ( $dif->h ) $arr[] = sprintf( "%d hora%s" , $dif->h , $dif->h > 1 ? "s" : "" );
if ( $dif->i ) $arr[] = sprintf( "%d minuto%s" , $dif->i , $dif->i > 1 ? "s" : "" );
if ( $dif->s ) $arr[] = sprintf( "%d segundo%s" , $dif->s , $dif->s > 1 ? "s" : "" );
if ( ( $total = count( $arr ) ) >= 2 ) $ret = sprintf( "%s e %s" , implode( ", " , array_slice( $arr , 0 , $total - 1 ) ) , end( $arr ) );
else $ret = implode( "" , $arr );
return( $ret );
}
A função acima irá receber 1 ou 2 timestamps, e irá retornar a diferença entre eles, por exemplo:
var_dump( diffstr( time2uts( "56:56:01.16" ) ) ); //string(39) "2 dias, 8 horas, 56 minutos e 1 segundo"
Para calcular a diferença entre dois timestamps basta você utilizar o outro argumento:
printf( "Faltam %s para meus %s\n" , diffstr( mktime() , 1252164800 ) , diffstr( 368552000 , 1252164800 ) ); //Faltam 19 dias, 14 horas, 59 minutos e 31 segundos para meus 28 anos
printf( "%s passaram desde o marco inicial do Unix Timestamp" , diffstr( 1 , mktime() + 1 ) ); //39 anos, 7 meses, 16 dias, 35 minutos e 16 segundos passaram desde o marco inicial do Unix Timestamp
Olha, dá uma olhada no book de data/hora. Acho que misturando o mktime com o strftime dá o resultado que você quer.
Carlos Eduardo
EDIT - Faltou o link para o book de data/hora
http://br.php.net/manual/pt_BR/book.datetime.php