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

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

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.

deu esse erro aqui: ReferenceError: document is not defined

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

Ogora deu certo manolo! valeu. :sweat_smile: :

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

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?

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

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

No Repl.it funciona, veja: RelogioJS - Replit

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

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

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