Ir para conteúdo

POWERED BY:

Arquivado

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

Good

[Resolvido] Somar H:M:S

Recommended Posts

Ae, eu tenho 2 horas salvadas no banco... uma é o tempo de duração no formato (0:00:00 | H:i:s), aí a segunda é a hora de ínicio, no formato 00:00:00... ae eu quero somar o tempo de duração com a hora de ínicio...

 

eu queria que o resultado fosse exato, ou seja, ele o tempo não ficasse sendo modificado.. ficasse um tempo fixo, até a hora de término da linha na tabela do banco de dados...

 

olha a função que eu fiz:

 

    function tempoRestante($hour1,$hour2){
    
         $time = explode(":", $hour1);
         $time2 = explode(":", $hour2);

         if($time[0] <= "1"){
         $hour = "hour";
         } else {
         $hour = "hours";
         }
         if($time[1] <= "1"){
         $minute = "minute";
         } else {
         $minute = "minutes";
         }
         if($time[2] <= "1"){
         $second = "second";
         } else {
         $second = "seconds";
         }

        return date("H:i:s", strtotime("+$time2[0] $hour +$time2[1] $minute +$time2[2] $second"));

    }
//Onde $hour1 é a duração em hora, minuto e segundo, e $hour2 é o tempo de ínicio....

Ae, ele tá retornando errado... ou então, eu queria que o tempo fosse acabando...

 

Exemplo 1: Exatamente as 19:18:13 o item irá acabar

Exemplo 1: Faltam 00:57:35 para o item acabar

Faltam 00:57:34 para o item acabar

Faltam 00:57:33 para o item acabar

Faltam 00:57:32 para o item acabar

 

 

Um desses 2 tá bom, ou então os 2 tá bom..

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se entendi direito.. Você quer uma contagem regressiva? Você tem que comparar o tempo atual, subtraído do tempo de duração, com a hora de início. Você pode usar o timestamp para isso, subtraindo do horário atual o hoŕario de início somado com o tempo de duração.

 

Veja a documentação das funções de data e hora:

http://br2.php.net/datetime

 

PS: Para somar tempo, no seu caso, mktime() é mais eficiente que strtotime(), pois trabalha diretamednte com números, sem precisar converter string em valor numérico

Compartilhar este post


Link para o post
Compartilhar em outros sites

    function Restante($duracao,$inicio){

        $soma = $inicio + $duracao;
        $resultado = time() - $soma;
        return date("G:i:s", $resultado);

    }

Acho que errei no date... eu queria retornar no formato 0:00:00... isso dae me retornou umas horas 7:23:15 algo assim, ae eu atualizava a página e começava tudo de novo.. to usando uma função do js para atualizar a hora sem atualizar a página... pq que começa tudo de novo? Eu inseri a duração e o inicio no banco de dados utilizando a função time()... se tiver outro jeito, como posso fazer pra retornar no formato 0:00:00?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como são os conteúdos de $inicio e $duracao? Poste exemplos, com dados reais e os resultados obtidos.

 

 

 

PS:

O PHP já tem, nativamente, uma classe para manipulação de data e hora:

http://br.php.net/manual/en/class.datetime.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

$inicio = 1263476739;
$duracao = 1263476739; 

 

Coloquei os mesmos valores pra fazer um teste..

 

e saiu isso: 10:33:42

 

ae o tempo foi aumentando..

Compartilhar este post


Link para o post
Compartilhar em outros sites

A duração não pode ser a mesma que o horário inicial. O início é um timestamp. A duração deve ser um intervalo de tempo, em segundos, no seu caso.

 

Você fez a função certa, só não está sabendo usá-la. Teste-a assim:

 

$inicio = strtotime( '2010-01-14 00:00:00:' );
$duracao = 3600; // 60 * 60, ou seja, uma hora

echo Restante( $duracao, $inicio );

Isso mostrará o tempo decorrido desde o fim do ocorrido.

 

 

Talvez isto lhe interesse:

http://www.rberaldo.com.br/blog/2010/01/14/php-usando-a-classe-nativa-datetime/

 

 

Essa classe DateTime ajuda muito. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso mostrou a hora atual..

 

olha é assim..

 

Eu vou iniciar às 17:00:00

 

vai ter uma duração de 00:45:00

 

Ae quando eu tiver exatamente as 17:30:00, irá mostrar "Faltam 00:15:00"... Eu não quero usar dias, mês e ano...

 

quero fazer apenas em horas.. se for mais de 50 horas, eu quero mostrar assim: "Faltam 50:00:00"

 

Não importa a gambiarra, se der certo, pra mim tá bom!

 

 

-------------

 

Eu penso em fazer assim:

 

Somar a hora de ínicio e duração (17:45:00), depois subtrair essa hora, da hora atual (17:45:00 - 17:30:00 = 00:15:00)

 

Como que faz assim?

 

-------------

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora entendi

 

Você quer apenas o tempo, logo, não pode usar date(), uma vez que essa função usa timestamp. Se, na função date(), você inserir d/m/Y, verá que aparecerá data de 1969

 

Você tem que pegar o valor de $resulatdo e fazer sucessivas divisões, para obter a quantidade de horas e minutos desejada. Outra forma é usar a minha dica da classe DateTime, usando o método diff().

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei nada disso... mas beleza, vou olhar umas funções pra ver como se faz de outra maneira..

 

Não sei nada disso... mas beleza, vou olhar umas funções pra ver como se faz de outra maneira..

 

e a função date, dá pra pegar só tempo mesmo..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei nada disso... mas beleza, vou olhar umas funções pra ver como se faz de outra maneira..

 

É a terceira vez que cito a classe DateTime, informando que ela resolve seu porblema BEM mais facilmente. Até postei o link para o artigo onde mostro como fazer diversas coisas, incluindo exatamente o que quer fazer, com o método diff().

Mas se quer encontarr outro jeito, tranquilo. Você que sabe.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

 

 

e a função date, dá pra pegar só tempo mesmo..

 

Primeiro entenda o que é um timestamp e o que date() faz.

 

 

Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT).

 

fonte: http://www.php.net/time

 

Mais sobre timestamp e a Era Unix (epoch) aqui:

http://pt.wikipedia.org/wiki/Era_unix

 

 

Sobre date():

Returns a string formatted according to the given format string using the given integer timestamp or the current time if no timestamp is given.

 

fonte: http://www.php.net/manual/en/function.date.php

 

Ou seja, date() usa timestamp, que é um período de tempo medido desde 010/01/1970, o que não é o seu caso. $resultado possui um intervalo curto de tempo, não uma data no formato inteiro

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.