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
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. :
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…
Valeu! … 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.