Mexendo com new Date(), como fazer a saída certa no console? JS puro

12 respostas Resolvido
javascriptprogramação
R
function minhadata(){
  var d = new Date();
  var horas = d.getHours();
  var min = d.getMinutes();
  var sec = d.getSeconds();

  body.innerHTML = horas + ":" + min + ":" + sec;

    setInterval(minhadata, 1000);
}
console.log(minhadata());

12 Respostas

H

Se vc quer mostrar no console, não coloque no innerHTML :slight_smile:

Enfim, se a ideia é mostrar na página, então deve usar document.body e não somente body, e não precisa do console.log.

E também pode usar uma função para preencher com zero à esquerda (assim, se for 9 horas, é mostrado como 09):

function pad(valor) {
  return valor.toString().padStart(2, '0');
}
function minhadata() {
  var d = new Date();
  var horas = d.getHours();
  var min = d.getMinutes();
  var sec = d.getSeconds();

  document.body.innerHTML = pad(horas) + ":" + pad(min) + ":" + pad(sec);

}

setInterval(minhadata, 1000);

Se bem que não precisa disso, pois essa formatação que vc quer já tem pronto na linguagem, através do método toLocaleTimeString:

function minhadata() {
  var d = new Date();
  document.body.innerHTML = d.toLocaleTimeString('pt-BR');
}

setInterval(minhadata, 1000);

No caso, eu passo o locale pt-BR, que corresponde ao português do Brasil, assim ele já ajusta o formato automaticamente para HH:MM:SS.

R

deu esse erro aqui: ReferenceError: document is not defined

H

Bom, como vc tinha usado innerHTML, eu imaginei que estava rodando dentro de um HTML. Mas pelo jeito não está, por isso não tem document.

Como vc está rodando? É no Node.js?

Enfim, se for só pra mostrar na tela, use console.log mesmo:

function minhadata() {
    var d = new Date();
    console.log(d.toLocaleTimeString('pt-BR'));
    setTimeout(minhadata, 1000);
}

minhadata();

Ah, também mudei setInterval para setTimeout. Pois chamar várias vezes setInterval não faz sentido. Claro, se fosse para usá-lo, aí deveria chamar uma vez só:

function minhadata() {
    var d = new Date();
    console.log(d.toLocaleTimeString('pt-BR'));
}

setInterval(minhadata, 1000);
R

Ogora deu certo manolo! valeu. :sweat_smile: :

R

Eu brizei ao passar “innerHTML”, estou em ambiente JS puro.

aqui o resultado certo:

function minhadata(){
  var d = new Date();
  var horas = d.getHours();
  var min = d.getMinutes();
  var sec = d.getSeconds();

  console.log(horas + ":" + min + ":" + sec);
}
setTimeout(minhadata, 1000);
R

Outra coisa! se eu quero que apareça no console o tempo real do meu relógio, o que fazer? tipo, vai passando os números em contagem(“contador”). Se coloco setInterval o relógio vai de linha em linha! … como fazer o meu tempo em um so lugar do console?

H

Se for no Node, seria algo assim: Node.js: printing to console without a trailing newline? - Stack Overflow

R

É no playcode.io e repl.it IDE online, JS puro…
estas plataformas sao gratuitas e estou usando para estudos… :smile:

H
Solucao aceita

No Repl.it funciona, veja: RelogioJS - Replit

R

Valeu! :slight_smile: … no playcode não funciona porque é vanilla?

H

Pelo que vi, o playcode roda direto no browser mesmo. Como process.stdout é do Node, então não vai funcionar ali (sem contar o escape \033[K para apagar a linha, que não é suportado por todos os terminais - no browser então, nem se fala).

Mas no browser faria mais sentido escrever em algum elemento do HTML mesmo (como eu fiz no exemplo do document.body.innerHTML).

R

Okey! valeu parça. você é top. :wink:

Criado 7 de fevereiro de 2023
Ultima resposta 9 de fev. de 2023
Respostas 12
Participantes 2