2
respostas

exercicio de horarios com if, elseif e else

Gostaria de entender melhor porque meu codigo não aparece corretamente o horairio e quero definir todas as 24 horas e mostrar horas e minutos com dois pontos, java nao ajuda com esse tipo de coisa. ah eu criei uma função horario e depois a chamei. Se puder me ajudar a esclarecer o problema dos ifs e da entrada dos pontos para dois pontos e os minutos eu agradeço. exemplo se vc digitar com ":" o programa sempre vai informar boa noite. eu quero que se o usuario digitar um horario e estiver dentro do intervalo, a função mostre o horario com dois pontos e não com ponto.

<meta charset="UTF-8">

<script>
    function pulaLinha(){
        document.write("<br>");
    }
    function mostra(frase){
        pulaLinha();
        document.write(frase);
        pulaLinha();
    }

        var hora = prompt("qual a hora agora? ");

        function horario(){

            var horaReal = hora.replace(":", ".");


             if (hora >= 8.00 && hora <= 12.00) {
                mostra("são " + horaReal + " horas" + " Bom Dia!");

            }else if (hora >= 12.01 && hora <= 18.00) {
                mostra("são " + horaReal + " horas" + " Boa tarde!");
            }
            else{
                mostra("são " + horaReal + " horas" + " Boa Noite!");
            }
        }

horario();

</script>

na parte do else eu quero informar que se a hora estiver entre 18.01 e 7.59 diga boa noite! e se nao digitar nada apareca uma caixa de alerta pedindo para digitar um valor, até aqui funcionou mas depois nao consegui prossegui com essas outras informações

2 respostas

Oi Alessandro

Data e Hora é sempre uma complicação na maioria das linguagens, dependendo do problema você precisa utilizar alguma biblioteca ou entender mais uma disponibilizada pelo próprio Javascript que é: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Date

Vou te dar um exemplo simples da dificuldade que é trabalhar comparando datas:

  • 01/12/2020
  • 02/11/2020

nós sabemos que a primeira data é mais próxima do nosso ano atual, correto?

Repare que está no padrão brasileiro de exibição (DD/MM/YYY), se eu simplesmente remover a barra e fizer uma verificação de qual número é maior irá retornar o segundo como o maior 01122020 > 02112020 e assim a lógica não iria me falar qual seria o número maior.

Uma solução simples sem utilizar uma biblioteca ou o Date() do javascript seria inverter para o padrão YYYY/MM/DD e assim todas as datas seriam possíveis de verificar com o maior que.

20201201 > 20201102 >> true

Dei esse exemplo justamente pra mostrar que data e hora precisamos de alguma biblioteca que já tratou esse tipo de situação.

Voltando a hora que também tem algumas peculiaridades por exemplo se você tem esse cenário de 18.01 e 7.59 como falar para o programa que depois das 23.59 o contador zera e começa 00.00 ?

Quando você substituiu os 2 pontos ( : ) por ponto ( . ) você converteu a hora em um float e assim pode fazer a comparação de valores.

Ficou grande o texto mas é importante entender que data e hora são tratados de forma diferente, é possível fazer algumas verificações simples como esta que está fazendo ou a que dei de exemplo com a data, mas tome cuidado porque pode acontecer algum cenário que você não previu.

E aqui está o código que você quer:

<meta charset="UTF-8" />

<script>
  function pulaLinha() {
    document.write("<br>");
  }
  function mostra(frase) {
    pulaLinha();
    document.write(frase);
    pulaLinha();
  }

  var hora = prompt("qual a hora agora? ");

  function horario() {
    var horaReal = hora.replace(":", ".");

    if (horaReal >= 8.0 && horaReal <= 12.0) {
      mostra("são " + hora + " horas" + " Bom Dia!");
    } else if (horaReal >= 12.01 && horaReal <= 18.0) {
      mostra("são " + hora + " horas" + " Boa tarde!");
    } else {
      mostra("são " + hora + " horas" + " Boa Noite!");
    }
  }

  horario();
</script>

Você deixou a comparação com o valor da variável hora e não horaReal