1
resposta

disparar função no dia e hora certo (não ta dando certo)

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>aula automatica</title>


</head>
<h1>bot que abre aula automatico</h1>
<body>
</body>



</html>

<script type=text/javascript>

    var semana = new Date()
    var dia = semana.getDay()

    if (dia = 7 ){



        window.onload = function chefe()
        {
            setTimeout('funcionario()' , hora());
        }


        function hora()
        {

            horaProgramada = new Date();
            horaAtual = new Date();
            horaProgramada.setHours(19;
            horaProgramada.setMinutes(12);
            horaProgramada.setSeconds(0);
            return horaAtual.getTime() - horaProgramada.getTime(); 

        }


        function funcionario ()
        {
            alert('teste');
        }

    }


</script>
1 resposta

Olá Fernando!

A função getDay() retorna o dia da semana como número de 0 (domingo) a 6 (sábado).

Como você está comparando com 7, ele nunca atenderá essa condição e por isso nunca executará o bloco.

E, apenas mais uma questão de boas práticas é que o seu código está fora de <head> e <body>, então ele apenas carregará isso depois de toda a página, como você quer que ele execute no onload, o ideal é que ele fique ou dentro do head e seja carregado antes da página.

Ajustei os conteúdos para dentro de head e body, além que faltava fechar um parênteses em horaProgramada.setHours(19 e no Javascript a compara é feita com dois sinais de igual dia == 7, apenas um é usado para definir valores.

A função setTimeout precisa executar uma função, se você simplesmente passar uma função direto para ela, ela irá executar, então ficaria algo mais ou menos assim:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>aula automatica</title>

    <script type="text/javascript">
        var semana = new Date()
        var dia = semana.getDay()

        if (dia == 0) { //0 = domingo
            window.onload = function chefe() {
                var milisegundos = hora();
                setTimeout(function() { funcionario() }, milisegundos);
                console.log('Progamado para executar em ' + Math.ceil(milisegundos / 1000) + ' segundos.');
            }

            function hora() {
                horaProgramada = new Date();
                horaAtual = new Date();
                horaProgramada.setHours(19);
                horaProgramada.setMinutes(12);
                horaProgramada.setSeconds(0);
                return horaProgramada - horaAtual;
            }

            function funcionario () {
                alert('teste');
                return true;
            }
        }
    </script>
</head>

<body>
    <h1>bot que abre aula automatico</h1>
</body>
</html>

Adicionei um console.log para registrar em quantos segundos a mensagem será exibida e assim você tem a certeza que o método está agendado para executar.

Qualquer dúvida é só falar!

Abraços!