walbert 0 Denunciar post Postado Outubro 11, 2011 Olá Pessoal, SOU NOVATO EM PHP! Estou fazendo uma aplicação em uma IDE de PHP e tenho que verificar a diferença entre dois horários do mesmo dia. O código abaixo faz tudo isso. Ele me dá a resposta correta para o problema! O que eu quero agora é dividir o resultado que obtenho da diferença das horas por um núemro inteiro. Explicando: No código abaixo se eu colocar a hora inicial como: 08:15 e a hora final como: 15:23 ele me retornará como resultado do intervalo o valor de 7 horas e 7 minutos. O que eu quero agora é pegar o resultado (7 horas e 7 minutos) e dividir por um número inteiro. Por exemplo dividir por 8. Alguém poderia me ajudar a complementar o código? Se possível com comentário? As variáveis são: Para o número inteiro é: $numero Para o resultado é: $intervalo Agradeço muito a ajuda e muito obrigado a todos do fórum! -------------------------INICIO DO CÓDIGO----------------------------------------- function difDeHoras($hIni, $hFinal) { // Separa á hora dos minutos $hIni = explode(':', $hIni); $hFinal = explode(':', $hFinal); // Converte a hora e minuto para segundos $hIni = (60 * 60 * $hIni[0]) + (60 * $hIni[1]); $hFinal = (60 * 60 * $hFinal[0]) + (60 * $hFinal[1]); // Verifica se a hora final é maior que a inicial if(!($hIni < $hFinal)) { return false; } // Calcula diferença de horas $difDeHora = $hFinal - $hIni; //Converte os segundos para Hora e Minuto $tempo = $difDeHora / (60 * 60); $tempo = explode('.', $tempo); // Aqui divide o restante da hora, pois se não for inteiro, retornará um decimal, o minuto, será o valor depois do ponto. $hora = $tempo[0]; @$minutos = (float) (0) . '.' . $tempo[1]; // Aqui forçamos a conversão para float, para não ter erro. $minutos = $minutos * 60; // Aqui multiplicamos o valor que sobra que é menor que 1, por 60, assim ele retornará o minuto corretamente, entre 0 á 59 minutos. $minutos = explode('.', $minutos); // Aqui damos explode para retornar somente o valor inteiro do minuto. O que sobra será os segundos $minutos = $minutos[0]; //Aqui faz uma verificação, para retornar corretamente as horas, mas se não quiser, só mandar retornar a variavel hora e minutos if (!(isset($tempo[1]))) { if($hora == 1){ return 'intervalo de ' . $hora . ' Hora.'; } else { return 'intervalo de ' . $hora . ' Horas.'; } } else { if($hora == 1){ if($minutos == 1){ return 'intervalo de ' . $hora . ' Hora e ' .$minutos . ' Minuto.'; } else { return 'intervalo de ' . $hora . ' Hora e ' .$minutos . ' Minutos.'; } } else { if($minutos == 1){ return 'intervalo de ' . $hora . ' Horas e ' .$minutos . ' Minuto.'; } else { return 'intervalo de ' . $hora . ' Horas e ' .$minutos . ' Minutos.'; } } } } $diferencatempo = difDeHoras($inicial, $fim); -------------------------FIM DO CÓDIGO----------------------------------------- Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Outubro 11, 2011 Você pode obter o timestamp Unix para das horas de início e fim. Diminuir a menor da maior e após transformar novamente em hora. Segue o exemplo. $horaInicial = '8:30'; $horaFinal = '18:36'; //Separa Hora e Minutos $horaInicial = explode( ':', $horaInicial ); $horaFinal = explode( ':', $horaFinal ); //Obtém o timestamp Unix. Seguindo, no seu caso, a ordem Hora/Minuto. $horaIni = mktime( $horaInicial[0], $horaInicial[1]); $horaFim = mktime( $horaFinal [0], $horaFinal [1]); //Verifica a dirença entre os horários $horaDiferenca = $horaFim - $horaIni; //Imprime a diferença entre eles echo "A diferença é de ".date('H',$horaDiferenca ).":".date('i',$horaDiferenca ); Acredito que isso pode resolver o seu problema. Para maiores informações sobre cada função usada. http://php.net/manual/en/function.explode.php http://www.php.net/manual/pt_BR/function.mktime.php http://www.php.net/manual/pt_BR/function.date.php Compartilhar este post Link para o post Compartilhar em outros sites
Henrique Barcelos 290 Denunciar post Postado Outubro 11, 2011 Só o finalzinho aí, dá pra simplificar: //Imprime a diferença entre eles echo "A diferença é de ".date('H:i',$horaDiferenca ); Compartilhar este post Link para o post Compartilhar em outros sites
walbert 0 Denunciar post Postado Outubro 17, 2011 Muito, muito, muito obrigado Gabriel e Henrique: Resolvi o meu problema com o código abaixo que obtive de resposta de outro fórum! Agora estou com o seguinte problema: Leiam tudo e o código está abaixo: Olá Pessoal, Estou fazendo uma aplicação em uma IDE de PHP e tenho que verificar a diferença entre dois horários do mesmo dia. O código abaixo faz tudo isso. Ele me dá a resposta correta para o problema! O que eu quero agora é dividir o resultado que obtenho da diferença das horas por um núemro inteiro. Explicando: No código abaixo se eu colocar a hora inicial como: 08:15 e a hora final como: 15:23 ele me retornará como resultado do intervalo o valor de 7 horas e 7 minutos. O que eu quero agora é pegar o resultado (7 horas e 7 minutos) e dividir por um número inteiro. Por exemplo dividir por 8. Alguém poderia me ajudar a complementar o código? Se possível com comentário? As variáveis são: Para o número inteiro é: $numero Para o resultado é: $intervalo Agradeço muito a ajuda e muito obrigado a todos do fórum! function difDeHoras($hIni, $hFinal) { // Separa á hora dos minutos $hIni = explode(':', $hIni); $hFinal = explode(':', $hFinal); // Converte a hora e minuto para segundos $hIni = (60 * 60 * $hIni[0]) + (60 * $hIni[1]); $hFinal = (60 * 60 * $hFinal[0]) + (60 * $hFinal[1]); // Verifica se a hora final é maior que a inicial if(!($hIni < $hFinal)) { return false; } // Calcula diferença de horas $difDeHora = $hFinal - $hIni; //Converte os segundos para Hora e Minuto $tempo = $difDeHora / (60 * 60); $tempo = explode('.', $tempo); // Aqui divide o restante da hora, pois se não for inteiro, retornará um decimal, o minuto, será o valor depois do ponto. $hora = $tempo[0]; @$minutos = (float) (0) . '.' . $tempo[1]; // Aqui forçamos a conversão para float, para não ter erro. $minutos = $minutos * 60; // Aqui multiplicamos o valor que sobra que é menor que 1, por 60, assim ele retornará o minuto corretamente, entre 0 á 59 minutos. $minutos = explode('.', $minutos); // Aqui damos explode para retornar somente o valor inteiro do minuto. O que sobra será os segundos $minutos = $minutos[0]; //Aqui faz uma verificação, para retornar corretamente as horas, mas se não quiser, só mandar retornar a variavel hora e minutos if (!(isset($tempo[1]))) { if($hora == 1){ return 'intervalo de ' . $hora . ' Hora.'; } else { return 'intervalo de ' . $hora . ' Horas.'; } } else { if($hora == 1){ if($minutos == 1){ return 'intervalo de ' . $hora . ' Hora e ' .$minutos . ' Minuto.'; } else { return 'intervalo de ' . $hora . ' Hora e ' .$minutos . ' Minutos.'; } } else { if($minutos == 1){ return 'intervalo de ' . $hora . ' Horas e ' .$minutos . ' Minuto.'; } else { return 'intervalo de ' . $hora . ' Horas e ' .$minutos . ' Minutos.'; } } } } $diferencatempo = difDeHoras($inicial, $fim); Compartilhar este post Link para o post Compartilhar em outros sites
Daniel o rei 14 Denunciar post Postado Outubro 18, 2011 Serha mais ou menos assim? $tm = $horas /60 + $minutos; $tm /= 8; $horas = round($tm/60);$minutos= $tm % 60; nao sei se é esse o problema Compartilhar este post Link para o post Compartilhar em outros sites
walbert 0 Denunciar post Postado Outubro 19, 2011 Olá, tudo bem? Estou com uma dúvida simples no código abaixo e não consigo resolver. A função abaixo me retorna o que eu quero: a diferença entre duas variaveis de horas ($inicial, $fim). Seu colocar, por exemplo: $inicial = 9:30 e $fim = 13:45 retorno o seguinte resultado é: O intervalo é de: 4 Horas e 15 Minutos. O que eu quero agora, e não consigo é: Pegar esse intevalo e transformar em minutos para aparecer na variavel $difminutos. Preciso dessa variável em minutos fora de função para continuar com outros cálculos. Pode me ajudar? //A função que retorna a diferença entre hora inicial e hora final function difDeHoras($hIni, $hFinal) { // Separa á hora dos minutos $hIni = explode(':', $hIni); $hFinal = explode(':', $hFinal); // Converte a hora e minuto para segundos $hIni = (60 * 60 * $hIni[0]) + (60 * $hIni[1]); $hFinal = (60 * 60 * $hFinal[0]) + (60 * $hFinal[1]); // Verifica se a hora final é maior que a inicial if(!($hIni < $hFinal)) { return false; } // Calcula diferença de horas $difDeHora = $hFinal - $hIni; //Converte os segundos para Hora e Minuto $tempo = $difDeHora / (60 * 60); $tempo = explode('.', $tempo); // Aqui divide o restante da hora, pois se não for inteiro, retornará um decimal, o minuto, será o valor depois do ponto. $hora = $tempo[0]; @$minutos = (float) (0) . '.' . $tempo[1]; // Aqui forçamos a conversão para float, para não ter erro. $minutos = $minutos * 60; // Aqui multiplicamos o valor que sobra que é menor que 1, por 60, assim ele retornará o minuto corretamente, entre 0 á 59 minutos. $minutos = explode('.', $minutos); // Aqui damos explode para retornar somente o valor inteiro do minuto. O que sobra será os segundos $minutos = $minutos[0]; //Aqui faz uma verificação, para retornar corretamente as horas, mas se não quiser, só mandar retornar a variavel hora e minutos if (!(isset($tempo[1]))) { if($hora == 1){ return 'Você esse total fuma em um intervalo de ' . $hora . ' Hora.'; } else { return 'Você fuma esse total em um intervalo de ' . $hora . ' Horas.'; } } else { if($hora == 1){ if($minutos == 1){ return 'Você esse total fuma em um intervalo de ' . $hora . ' Hora e ' .$minutos . ' Minuto.'; } else { return 'Você fuma esse total em um intervalo de ' . $hora . ' Hora e ' .$minutos . ' Minutos.'; } } else { if($minutos == 1){ return 'Você fuma esse total em um intervalo de ' . $hora . ' Horas e ' .$minutos . ' Minuto.'; } else { return 'Você fuma esse total em um intervalo de ' . $hora . ' Horas e ' .$minutos . ' Minutos.'; } } } } //Essa operação me retorna a diferença entre hora inicial e hora final $diferencatempo = difDeHoras($inicial, $fim); //Isso é que eu quero, a diferença acima que vem em horas : minutos, apenas em minutos (O TOTAL EM MINUTOS) $difminutos = ? Compartilhar este post Link para o post Compartilhar em outros sites
Daniel o rei 14 Denunciar post Postado Outubro 19, 2011 Se for só converter horas x:y é só multiplicar x por sessenta e somar com os minutos $total = $horas * 60 + $minutos ; Compartilhar este post Link para o post Compartilhar em outros sites
walbert 0 Denunciar post Postado Outubro 20, 2011 Oi Daniel, Assim não resolve! Eu tenho que retirar as variaveis: $hora e $minutos de dentro da função e converter ambas para minutos (no caso seria converter $hora e somar com $minutos). O resultado da minha função vem assim: Você fuma esse total em um intervalo de 14 Horas e 46 Minutos. O que eu quero é pegar essas 14 horas e 46 minutos e transformar tudo em minutos e colocar na minha variavel: $intervaloemminutos. Já tentei de tudo aqui e não consigo fazer isso! Agradeço e peço por mais ajuda sua e de outros que participam do forum! Abs, Compartilhar este post Link para o post Compartilhar em outros sites
walbert 0 Denunciar post Postado Outubro 20, 2011 O que eu quero é pegar a variável $hora dentro da função, multiplicar por 60, somar com a variavel $minutos e dividir a soma das 2 variaveis por uma outra variavel de numero inteiro. Por exemplo: a resposta da função dará 2 horas e 30 minutos e minha variavel de numero inteiro será 10. Então eu quero é multiplicar 2 horas por 60 e somar com 30 minutos e dividir por 10 o resultado dará : 15 para esse exemplo. Para explicar tudo melhor estou enviando uma tela com o form de entrada e com os resultados abaixo de retorno para que entenda melhor: O código abaixo retorno a imagem acima: ESSE É O CÓDIGO QUE RETORNA A TELA QUE ENVIEI: //Mostra o total de cigarros $totalcigarros = $cigarros; function difDeHoras($hIni, $hFinal) { // Separa á hora dos minutos $hIni = explode(':', $hIni); $hFinal = explode(':', $hFinal); // Converte a hora e minuto para segundos $hIni = (60 * 60 * $hIni[0]) + (60 * $hIni[1]); $hFinal = (60 * 60 * $hFinal[0]) + (60 * $hFinal[1]); // Verifica se a hora final é maior que a inicial if(!($hIni < $hFinal)) { return false; } // Calcula diferença de horas $difDeHora = $hFinal - $hIni; //Converte os segundos para Hora e Minuto $tempo = $difDeHora / (60 * 60); $tempo = explode('.', $tempo); // Aqui divide o restante da hora, pois se não for inteiro, retornará um decimal, o minuto, será o valor depois do ponto. $hora = $tempo[0]; @$minutos = (float) (0) . '.' . $tempo[1]; // Aqui forçamos a conversão para float, para não ter erro. $minutos = $minutos * 60; // Aqui multiplicamos o valor que sobra que é menor que 1, por 60, assim ele retornará o minuto corretamente, entre 0 á 59 minutos. $minutos = explode('.', $minutos); // Aqui damos explode para retornar somente o valor inteiro do minuto. O que sobra será os segundos $minutos = $minutos[0]; //Aqui faz uma verificação, para retornar corretamente as horas, mas se não quiser, só mandar retornar a variavel hora e minutos if (!(isset($tempo[1]))) { if($hora == 1){ return 'Você esse total fuma em um intervalo de ' . $hora . ' Hora.'; } else { return 'Você fuma esse total em um intervalo de ' . $hora . ' Horas.'; } } else { if($hora == 1){ if($minutos == 1){ return 'Você esse total fuma em um intervalo de ' . $hora . ' Hora e ' .$minutos . ' Minuto.'; } else { return 'Você fuma esse total em um intervalo de ' . $hora . ' Hora e ' .$minutos . ' Minutos.'; } } else { if($minutos == 1){ return 'Você fuma esse total em um intervalo de ' . $hora . ' Horas e ' .$minutos . ' Minuto.'; } else { return 'Você fuma esse total em um intervalo de ' . $hora . ' Horas e ' .$minutos . ' Minutos.'; } } } } //Retorna a função acima $diferencatempo = difDeHoras($inicial, $fim); /*O que eu quero agora é o resultado para $intervalo, mas primeiro tenho que extrair do resultado da função acima (que vem assim: Você fuma esse total em um intervalo de 14 Horas e 34 Minutos, ela vem para a variavel: $diferencatempo.) o número total em minutos para aí sim, pegar esse valor e dividir por 16, me retornando o tão esperado $intervalo :: Tá aí o meu problema! Observação: A classificação das variáveis são: ($cigarros = Number), ($inicial = Texto) e ($fim = Texto) Resumindo: O que quero é o resultado para $intervalo que será: $intervalo = ($diferencatempo / $totalcigarros); */ Compartilhar este post Link para o post Compartilhar em outros sites
Daniel o rei 14 Denunciar post Postado Outubro 20, 2011 Fazendo em outra função ficaria mais ou menos assim: function intervalo($cigarros, $inic , $fi){ $iniarr = explode(":" , $inic);//aqui transforma inicial em array $fiarr = explode(":", $fi);//aqui transforma final em array $inimin = $iniarr[0] * 60+ $iniarr[1];//transforma inicial em minutos $fimin = $fiarr[0] * 60+ $fiarr[1];//transforma final em minutos $diferenca = $fimin - $inimi;//calcula a diferenca $intervalo = $diferenca / cigarros ;//aqui o tão esperado intervalo return "O intervalo entre cada cigarro é:". intervalo . "minutos";//aqui retorna tudo } não sei se tem algum erro de sintaxe mas provavelmente vai funcionar, São dois tópicos, agora que eu vi Compartilhar este post Link para o post Compartilhar em outros sites
walbert 0 Denunciar post Postado Outubro 22, 2011 Oi Daniel, Desculpa te incomodar tanto, mas não deu certo (meu conhecimento de PHP não é bom). Tentei de tudo aqui e até alterei a função para as variáveis que estão na imagem acima e ficou assim: Minhas variáveis de entrada e saída estão na imagem que enviei. function intervalo($cigarros, $inicial , $fim){ $inicial = explode(":" , $inicial);//aqui transforma inicial em array $fim = explode(":", $fim);//aqui transforma final em array $inicial = $inicial[0] * 60+ $inicial[1];//transforma inicial em minutos $fim = $fim[0] * 60+ $fim[1];//transforma final em minutos $diferenca = $fim - $inicial;//calcula a diferenca $intervalo = $diferenca / cigarros ;//aqui o tão esperado intervalo return "O intervalo entre cada cigarro é:". $intervalo . "minutos";//aqui retorna tudo } //Intervalo usando a função do Daniel $intervalo = intervalo($cigarros, $inicial , $fim); Daniel, as resposta que vem é: O intervalo entre cada cigarro é:minutos Compartilhar este post Link para o post Compartilhar em outros sites
Hiran Habiff 0 Denunciar post Postado Abril 30, 2013 Ai galera uma class que eu criei, espero que sirva para vcs: <?php date_default_timezone_set('America/Sao_paulo'); class calculaTempo { // retorna diferença em dias, horas, minutos, segundos function completo($data){ $hora_data_atual = date("Y-m-d H:i:s"); $data = strtotime($data); $hora_data_atual = strtotime($hora_data_atual); $diferenca = $hora_data_atual - $data; $dias = floor($diferenca / 86400); $horas = floor($diferenca / 3600); $minutos = floor(($diferenca / 60) % 60); $segundos = floor($diferenca % 60); $resultado = "{$dias} dias e {$horas}:{$minutos}:{$segundos} horas"; return $resultado; } // retorna diferença em horas, minutos, segundos function tempo($data){ $hora_data_atual = date("Y-m-d H:i:s"); $data = strtotime($data); $hora_data_atual = strtotime($hora_data_atual); $diferenca = $hora_data_atual - $data; $hora = floor($diferenca / 3600); $minutos = floor(($diferenca / 60) % 60); $segundos = floor($diferenca % 60); $resultado = "{$hora}:{$minutos}:{$segundos}"; return $resultado; } // retorna diferença em dias function dias($data){ $hora_data_atual = date("Y-m-d H:i:s"); $data = strtotime($data); $hora_data_atual = strtotime($hora_data_atual); $diferenca = $hora_data_atual - $data; $dias = floor($diferenca / 86400); return $dias; } // retorna diferença em horas function horas($data){ $hora_data_atual = date("Y-m-d H:i:s"); $data = strtotime($data); $hora_data_atual = strtotime($hora_data_atual); $diferenca = $hora_data_atual - $data; $horas = floor($diferenca / 3600); return $horas; } // retorna diferença em minutos function minutos($data){ $hora_data_atual = date("Y-m-d H:i:s"); $data = strtotime($data); $hora_data_atual = strtotime($hora_data_atual); $diferenca = $hora_data_atual - $data; $minutos = floor($diferenca / 60); return $minutos; } // retorna diferença em segundos function segundos($data){ $hora_data_atual = date("Y-m-d H:i:s"); $data = strtotime($data); $hora_data_atual = strtotime($hora_data_atual); $diferenca = $hora_data_atual - $data; $segundos = $diferenca; return $segundos; } } $res = new calculaTempo(); $data = '2013-04-30 18:00:00'; $completo = $res->completo($data); // dias - horas , minutos e segundos $tempo = $res->tempo($data); // horas , minutos e segundos $dias = $res->dias($data); // dias $horas = $res->horas($data); // horas $minutos = $res->minutos($data); // minutos $segundos = $res->segundos($data); // segundos echo "<font size='2'>[dia] - [Hora][minutos][segundos]:</font> <b>" . $completo ."</b><br>"; echo "<font size='2'>[Hora][minutos][segundos]:</font> <b>" . $tempo ."</b><br>"; echo "<font size='2'>[Dias]:</font> <b>" . $dias ."</b><br>"; echo "<font size='2'>[Horas]:</font> <b>" . $horas ."</b><br>"; echo "<font size='2'>[Minutos]:</font> <b>" . $minutos ."</b><br>"; echo "<font size='2'>[Segundos]:</font> <b>" . $segundos ."</b><br>"; ?> Compartilhar este post Link para o post Compartilhar em outros sites
CélioP 0 Denunciar post Postado Novembro 27, 2014 Ótimo. Na medida pra mim, apenas com algumas adaptações. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites