Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

102
Visualizações
My Javascript if statements using time variables to display different message at set time periods execute a code block when it shouldn't

I am making an if statement that executes using variables based on the Date() function, but the if statement doesn't appear to prevent execution when it should. The code block is intended to reveal one among a set of possible paragraphs when the time is right. Here is my script

<script>
    const D = new Date();
    var m = D.getMinutes();
    var h = D.getHours();

    function showMessage() {
        if ((0 < h <= 5) || ((h == 6) && (m == 0))) {
            document.getElementById("m1").classList.remove("message");
        } else if (((6 == h) && (m != 0)) || (6 < h < 12) || ((h == 12) && (m == 0))) {
            document.getElementById("m2").classList.remove("message");
        } else if (((12 == h) && (m != 0)) || (12 < h < 18) || ((h == 18) && (m == 0))) {
            document.getElementById("m3").classList.remove("message");
        } else {
            document.getElementById("m4").classList.remove("message");
        }
    }
    showMessage();
</script>

Here is the relevant HTML block:

<div id="messagecontainer">
        <p class="message" id="m1">Good morning, you must be an early bird!</p>
        <p class="message" id="m2">Good morning</p>
        <p class="message" id="m3">Good afternoon</p>
        <p class="message" id="m4">Good evening</p>
</div>

And here is the CSS that makes it work:

.message {
    display: none;
}

As you can see, when the "message" class is removed from any paragraph, the paragraph should be revealed. I know this part works but the problem is that, it's always revealing the id="m1" paragraph when it shouldn't be. It should only be excuting from 1am (this is a mistake I just noticed and will fix) to 6pm. Otherwise it should go to as many else if statements as necessary until the time is right and the correct text block executes. For example, it is 3:30pm (15h30m) now and therefore the third block with the "m3" paragraph should be showing. But it's still the "m1".

The only things I can think of are that I somehow botched the syntax on the if statements or otherwise the variable scope isn't allowing me access to the variables within the if statements (I believe they should be global but I could be wrong). Can anyone see the problem?

about 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

This doesn't do what you think it does:

(0 < h <= 5)

This will evaluate one of the conditions first, then use the result of that condition to evaluate the second one. So you're essentially doing this:

(false <= 5)

Which would be true.

Separate the logical conditions explicitly:

((0 < h) && (h <= 5))
about 4 years ago · Santiago Trujillo Relatório

0

You are writing some conditions that don't work as expected (they work in mathematical notation, but not when writing code).

Take this for example 0 < h <= 5. It will get executed in steps

  1. 0 < 5. This can either be true or false
  2. true < 5 or false < 5, both of which will end up being evaluated to true. This is because of how JS converts some values when doing boolean or math operations

You need to split all of this in something like this 0 < h && h <= 5

about 4 years ago · Santiago Trujillo Relatório

0

The first if statement will always result to true

(0 < h <= 5) is equal to ((0 < h) <= 5) and you can check that it will be always true

In JavaScript, to check if a number is between two numbers (what in regular math would be n1 < x < n2), you have to use the && operator

(0 < h) && (h <= 5)

so:

(0 < h <= 5) || ((h == 6) && (m == 0)) is equal to

((0 < h) <= 5) || ((h == 6) && (m == 0)) which is not what you intended because the first two parenthesis will always result in a true value.

What you want is that: ((0 < h) && (h <= 5)) || ((h == 6) && (m == 0))

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda