Ir para conteúdo
Fórum Script Brasil
  • 0

Diferença entre horas


Walbert Costa

Pergunta

Olá Pessoal,

Sou novo em PHP e me deparo com o seguinte problema:

Tenho um form onde o usuário entra com 2 dados de horas.

Hora inicial: Aqui ele vai colocar 8:30

Hora final: Aqui ele vai colocar 18:36

Quero que o resultado apareça para ele com a diferença entre esses 2 horários.

Vou ter 3 variaveis:

horaini: 8:30;

horafim: 18:36;

diferenca_horas: "aqui virá o resultado em horas e minutos"

alguém pode me ajudar nisso?

Vi vários exemplos na rede mas não consigo adaptar para meu caso!

Muito obrigado!

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

$horaini = $_POST['inicio'];

$horafim = $_POST['fim'];

$diferenca_horas = ($horafim - $horaini );

echo $diferenca_horas;

ve se funciona assim..

ah.. antes desse codigo, você tem que criar um formulário assim..

<html>

<head>

<title>Nome do document</title>

</head>

<body>

<form name="form1" method="post" action="enviar.php">

<p>Hora inicial

<input name="inicio" type="text" id="inicio">

</p>

<p>Hora final

<input name="fim" type="text" id="fim">

</p>

<p>

<input type="submit" name="Submit" value="ok">

</p>

</form>

</body>

</html>

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Denner,

Não é bem isso que quero!

Eu já tenho o form e já foi configurado para os campos:

$horaini: tipo texto (onde está orientado para o usuário entrar com o dado assim: 00:00)

$horafim: tipo texto (onde está orientado para o usuário entrar com o dado assim: 00:00)

O que eu quero que o resultado venha em $diferenca_horas já com o resultado correto. Exempo:

$horaini: 08:30

$horafim: 14:00

O resultado terá que ser: 05:30

Agradeço sua ajuda!

Link para o comentário
Compartilhar em outros sites

  • 0

Ai, fiz essa função pra você aqui, com um exemplo de como funciona, ta bem comentado mas qualquer coisa só falar:

<?php
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 'A diferen&ccedil;a &eacute; de ' . $hora . ' Hora.';
        } else {
            return 'A diferen&ccedil;a &eacute; de ' . $hora . ' Horas.';
        }
    } else {
        if($hora == 1){
            if($minutos == 1){
                return 'A diferen&ccedil;a &eacute; de ' . $hora . ' Hora e ' .$minutos . ' Minuto.';
            } else {
                return 'A diferen&ccedil;a &eacute; de ' . $hora . ' Hora e ' .$minutos . ' Minutos.';
            }
        } else {
            if($minutos == 1){
                return 'A diferen&ccedil;a &eacute; de ' . $hora . ' Horas e ' .$minutos . ' Minuto.';
            } else {
                return 'A diferen&ccedil;a &eacute; de ' . $hora . ' Horas e ' .$minutos . ' Minutos.';
            }
        }
    }
}
?>

<form name="formHora" method="post" action="">
  <label for="hInicial">Hora Inicial:</label>
  <input type="text" name="hInicial" id="hInicial">
  
  <br /><br />
  
  <label for="hFinal">Hora Final:</label>
  <input type="text" name="hFinal" id="hFinal">
  
  <br /><br />
  
  <input type="submit" name="submit" id="submit" value="Submit">
</form>

<?php
if (isset($_POST['submit'])) {
    print difDeHoras($_POST['hInicial'], $_POST['hFinal']);
}
?>

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Weuller,

Em primeiro lugar, muito, muito, muito obrigado mesmo!!!

Ainda estou com problemas pois não sei como utilizar essa função.

Tentei de tudo aqui em localhost e nada.

Depois de sua função eu fiz isso e não vem a resposta correta:

$hIni = "08:30"

$hFinal = "08:35"

echo difDeHoras($hIni, $hFinal);

ou isso:

echo difDeHoras("08:36", "09:32");

Também não vem nada!

A resposta que vem para os dois códigos é:

9

6

6

Troquei os nomes das minhas variaveis para $hIni e $hFinal (na ordem: o primeiro para a hora inicial e o segundo para a hora final e instruções para o usuário digitar a hora no formato: 00:00

Agora: Como eu faço para chamar corretamente a função para que o resultado correto seja impresso?

Abraços,

Walbert

contato@byjoomla.com.br

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...