Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, fiz um script em PHP para pegar o UPTIME de um computador usando SNMP, mas o resultado vem em TimeStick...
Timeticks: (2437779) 6:46:17.79
Alguem sabe como converter o timestick para SEGUNDOS???
To precisando demais!!!
Valeu
Opa João..
Nossa cara que explicação boa, procurei na internet toda uma forma de fazer isso em PHP, com certeza você me ajudou demais.
Meu código de testes:
$sysuptime = snmpget("192.168.1.4", "casa", ".1.3.6.1.2.1.1.3.0", 500);
$sysuptime = str_replace("(","",$sysuptime);
$sysuptime = str_replace(")","",$sysuptime);
$tempo = explode(" ",$sysuptime);
$TS = $tempo[1] / 100;
$H = floor( $TS / 3600 );
$M = floor( ( $TS - ( $H * 3600 ) ) / 60 );
$S = floor( ( $TS - ( $H * 3600 ) - ( $M * 60 ) ) );
$m = $TS - ( $H * 3600 ) - ( $M * 60 ) - $S;
printf( "Uptime: %d:%02d:%02d.%02dn" , $H , $M , $S , $m * 100 );
Ele me retorna
>
Uptime: 0:01:56.56n
Que realmente faz 1 minuto que liguei o servidor.
Agora, teria como eu escrever na tela
1 minuto e 56 segundos?
e assim adiante?
1 dia 12 horas 45 minutos e 23 segundos
nao precisaria escrever 1 ano 1 mes...so de informar os dias, horas e minutos ja esta de bom tamanho.
Php tem alguma função nativa que faça isso?
Ou você tem alguma perdida ai?
Muito obrigado desde ja
Bom...tá meio bagunçado, mas...veja aí se te serve em alguma coisa. http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif
echo "<br><br><br>Converter um intervalo de datas em horas por extenso";
?><script type="text/javascript">
function horas(){
var now = new Date();
var hours = now.getHours();
var minutes = now.getMinutes();
var seconds = now.getSeconds()
if (hours <=9)
hours="0"+hours;
if (minutes<=9)
minutes="0"+minutes;
if (seconds<=9)
seconds="0"+seconds;
var cdate="<b><font color=#000FFF face=arial size=2>"+hours+" horas "+minutes+" minutos e "+seconds+" segundos"+"</font>"
clock.innerHTML= cdate;
setTimeout("horas()",1000);
}
</script>
<?
function calculaIntervalo($data1,$data2=''){
// se data2 for omitida, o calculo sera feito ate a data atual
$data2 = $data2=='' ? date("d/m/Y",mktime()) : $data2;
// separa as datas em dia,mes e ano
list($dia1,$mes1,$ano1) = explode("/",$data1);
list($dia2,$mes2,$ano2) = explode("/",$data2);
// so lembrando que o padrao eh MM/DD/AAAA
$timestamp1 = mktime(0,0,0,$mes1,$dia1,$ano1);
$timestamp2 = mktime(0,0,0,$mes2,$dia2,$ano2);
// calcula a diferenca em timestamp
$diferenca = ($timestamp1 > $timestamp2) ? ($timestamp1 - $timestamp2) : ($timestamp2 - $timestamp1);
// retorna o calculo em anos, meses e dias
return (date("Y",$diferenca)-1970)." anos,".(date("m",$diferenca)-1)." meses, ".(date("d",$diferenca))." dias; ";
}
echo "<br><b><font color=#000FFF face=arial size=2>".$valor = calculaIntervalo("01/07/2009","15/08/2009")."</font>"?><span id="clock" ></span><script>setTimeout("horas()",1000); document.write(doGreeting());</script>;>
Converter um intervalo de datas em horas por extenso
0 anos,1 meses, 14 dias; 17 horas 06 minutos e 42 segundos;
Bom...a ideia é:
você informar a data em que o servidor começou a ficar on-line e a ultima data (calcular o intervalo de tempo entre elas), daí pega as horas do dia atual(e veja o total de horas, minutos e segundos.
No entanto tem um pequeno probleminha, se você quiser saber o total de horas exatas, não vai ter como, pois a só está calculando o intervalo entre duas data e informando o tempo entre elas, então...você pode colocar o servidor on-line às 23:00 da noite que ainda assim irá contar como um dia todo.
Bom...boa sorte aí, qualquer coisa vai postando aí http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
>
Agora, teria como eu escrever na tela
1 minuto e 56 segundos?
e assim adiante?
1 dia 12 horas 45 minutos e 23 segundos
nao precisaria escrever 1 ano 1 mes...so de informar os dias, horas e minutos ja esta de bom tamanho.
A implementação é a mesma:
$TS = 2437779 / 100;
$D = floor( $TS / 86400 );
$H = floor( ( $TS - ( $D * 86400 ) ) / 3600 );
$M = floor( ( $TS - ( $D * 86400 ) - ( $H * 3600 ) ) / 60 );
$S = floor( ( $TS - ( $D * 86400 ) - ( $H * 3600 ) - ( $M * 60 ) ) );
$m = $TS - ( $D * 86400 ) - ( $H * 3600 ) - ( $M * 60 ) - $S;
$up = array();
if ( $D ) $up[] = sprintf( "%d dia%s" , $D , $D > 1 ? "s" : "" );
if ( $H ) $up[] = sprintf( "%d hora%s" , $H , $H > 1 ? "s" : "" );
if ( $M ) $up[] = sprintf( "%d minuto%s" , $M , $M > 1 ? "s" : "" );
if ( $S ) $up[] = sprintf( "%d segundo%s" , $S , $S > 1 ? "s" : "" );
printf( "Estamos UP por %s\n" , implode( ", " , $up ) ); //Estamos UP por 6 horas, 46 minutos, 17 segundos
Agora se você já estiver usando o PHP 5.3 ai a coisa vai mais longe, você conseguirá saber quantos dias, meses e até anos:
/**
* Converte um timetick em Unix Timestamp
* @param integer $TT O timetick
* @return integer Unix Timestamp
*/
function tt2uts( $TT ){
return( mktime() - ( (int) floor( $TT / 100 ) ) );
}
$odt = new Datetime( strftime( "%Y-%m-%d %H:%M:%S" , tt2uts( 2437779 ) ) );
$now = new Datetime();
$dif = $now->diff( $odt );
$up = array();
if ( $dif->y ) $up[] = sprintf( "%d ano%s" , $dif->y , $dif->y > 1 ? "s" : "" );
if ( $dif->m ) $up[] = sprintf( "%d mes%s" , $dif->m , $dif->m > 1 ? "es" : "" );
if ( $dif->d ) $up[] = sprintf( "%d dia%s" , $dif->d , $dif->d > 1 ? "s" : "" );
if ( $dif->h ) $up[] = sprintf( "%d hora%s" , $dif->h , $dif->h > 1 ? "s" : "" );
if ( $dif->i ) $up[] = sprintf( "%d minuto%s" , $dif->i , $dif->i > 1 ? "s" : "" );
if ( $dif->s ) $up[] = sprintf( "%d segundo%s" , $dif->s , $dif->s > 1 ? "s" : "" );
printf( "Estamos UP por %s\n" , implode( ", " , $up ) ); //Estamos UP por 6 horas, 46 minutos, 17 segundos
Putz...meu obrigado, voces nao sabem o quanto me ajudaram
Nota 10!
>
Pessoal, fiz um script em PHP para pegar o UPTIME de um computador usando SNMP, mas o resultado vem em TimeStick...
Timeticks: (2437779) 6:46:17.79
Alguem sabe como converter o timestick para SEGUNDOS???
Bom amigão, coloquei a conta toda em blocos, de uma forma que fique simples de entender:
printf( "Uptime: %d:%02d:%02d.%02dn" , $H , $M , $S , $m * 100 ); //Uptime: 6:46:17.79
Ai você também pode transformar em uma função:
Bom, agora que já conseguimos converter os timeticks para hora:minuto:segundo vamos pensar que o PHP e a maioria dos bancos de dados trabalham com TIMESTAMP, então o ideal é que seu timetick seja convertido para Unix Timestamp em vez de uma string, dessa forma, se você for armazenar essa informação em um banco de dados, você poderá usar em uma consulta operadores como BETWEEN:
/**
* Definir a localização é fundamental para que possamos pegar a diferença entre nós e Greenwich
*/
date_default_timezone_set( "America/Sao_Paulo" );
/**
* Converte um timetick em Unix Timestamp
* @param integer $TT O timetick
Agora podemos usar qualquer função de data e hora nativa do PHP para trabalhar, por exemplo:
O código acima irá exibir:
>
Estamos UP por 06:46:17
int(35177)
int(35177)