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

12 respostas Resolvido
javascriptprogramação
Raikfreela
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

hugokotsubo

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.

Raikfreela

deu esse erro aqui: ReferenceError: document is not defined

hugokotsubo

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);
Raikfreela

Ogora deu certo manolo! valeu. :sweat_smile: :

Raikfreela

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);
Raikfreela

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?

hugokotsubo

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

Raikfreela

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

hugokotsubo
Solucao aceita

No Repl.it funciona, veja: RelogioJS - Replit

Raikfreela

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

hugokotsubo

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).

Raikfreela

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

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