Jump to content
Fórum Script Brasil
  • 0

Diferença entre horas


Walbert Costa

Question

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 to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652.1k
×
×
  • Create New...