Carregando...

Datas em JavaScript

Se pedires «agora» ao computador, a manhã foge de cada vez que recarregas a página. Por isso pregamos uma quinta-feira e não a largamos: a sala de leitura abre a 14 de março de 2024, às 9:30. É com esta manhã que se vê a zanga entre o calendário da parede e o objeto.

Já não estás à procura numa lista

No array a resposta era uma casa, −1, sim ou não, ou o próprio selo. Uma data não se apanha assim. Constróis o instante e fazes-lhe uma pergunta de cada vez. A pergunta não adianta o ponteiro.

A folha desta quinta-feira

É o que cada pergunta vale nesta manhã, e o número ao lado com que ela se troca na pressa.

📊 Folha desta quinta-feira

Método A pergunta a sério Número desta manhã A troca habitual
getFullYear o ano por extenso 2024 escrevê-lo como 24
getMonth onde março se senta no objeto 2 lê-lo como 3
getDate o dia do mês 14 o lugar da quinta-feira
getDay o lugar da quinta-feira na semana 4 o dia 14
getHours a hora num dia de 0 a 23 9 uma marca extra de manhã
getMinutes o minuto 30 pedir 30 à hora

Janeiro é 0, fevereiro é 1, março é 2. Domingo é 0, segunda 1, terça 2, quarta 3, quinta-feira 4. O zero do array era a primeira casa. Estes zeros abrem o ano e a semana.

Tira o ano antes da zanga do mês

Sai o 2024 da frente, inteiro. Dia, hora e minuto esta linha nem olha.

O ano da quinta-feira

javascript
let opened = new Date(2024, 2, 14, 9, 30);
console.log(opened.getFullYear());

Vês 2024 porque foi isso que puseste em primeiro. O 2 do mês não aparece nesta linha, mas desde a construção já quer dizer março. 24 é um encurtamento de quem escreve à mão, não esta leitura.

Março, sentado no objeto

javascript
let opened = new Date(2024, 2, 14, 9, 30);
console.log(opened.getMonth());

O 2 não está curto de um. Com janeiro em 0, março calha neste número. Quem olha para a parede conta março como terceiro, e essa conta só entra na frase, mais à frente. Nesta leitura o 2 fica quieto.

O dia 14 e a quinta-feira

javascript
let opened = new Date(2024, 2, 14, 9, 30);
console.log(opened.getDate());
console.log(opened.getDay());

14 é o dia dentro do mês, 4 é a quinta-feira se domingo vale 0. Saem seguidos porque pediste as duas coisas. Não é a mesma pergunta duas vezes. Trocar os métodos é ler uma data e julgar que é o nome do dia, ou o contrário.

Nove e meia

javascript
let opened = new Date(2024, 2, 14, 9, 30);
console.log(opened.getHours());
console.log(opened.getMinutes());

Primeiro o 9, depois o 30. As horas começam em 0 à meia-noite e vão até 23, por isso este 9 é a manhã e não precisa de uma etiqueta à parte. O 30 é o minuto. Pedi-lo à hora é olhar para o ponteiro errado.

A visita do dia 20

javascript
let opened = new Date(2024, 2, 14, 9, 30);
let visit = new Date(2024, 2, 20, 15, 0);
console.log(visit.getTime() > opened.getTime());
console.log(visit.getDate());

A visita é a 20 de março às 15:00, portanto depois da abertura. getTime transforma cada instante num número que se pode pôr em ordem, e a comparação fica true. A linha a seguir é 20, o dia dessa visita. === não fala de antes nem de depois. Pergunta só se os dois nomes apontam para um único objeto. Aqui construíste dois.

A frase para quem não vê o código

O ano e o dia saem como estão. O mês escreve-se como no calendário da parede.

Frase para quem lê

html
<!DOCTYPE html>
<html>
<head>
<title>dates — page</title>
</head>
<body>
<p id="when">…</p>
<script>
let opened = new Date(2024, 2, 14, 9, 30);
let year = opened.getFullYear();
let displayMonth = opened.getMonth() + 1;
let day = opened.getDate();
let box = document.getElementById("when");
box.textContent = year + "-" + displayMonth + "-" + day;
</script>
</body>
</html>

O parágrafo fica 2024-3-14. Se voltares a perguntar o mês ao objeto, continua em 2. O número adiantado vive na frase feita para o olho. A manhã guardada não se mexeu.

Seis sítios onde esta quinta-feira tem de bater certo

Confere com a imagem, não adivinhes.

  1. O ano inteiro é 2024, não 24
  2. Dentro do objeto, março é 2
  3. O 14 vem de getDate e o 4 da quinta-feira vem de getDay
  4. A hora é 9 e o minuto é 30
  5. A visita do dia 20 é posterior, a comparação é true e esse dia é 20
  6. A frase do parágrafo é 2024-3-14 e o objeto continua com o mês em 2

O programa corre e o dia está errado

Não há aviso. Muda só o mês ou o número que julgavas estar a ler.

  • Passas 3 a new Date a pensar em março e construis abril
  • Lês o 2 como fevereiro, ou exiges 3 de getMonth
  • Vais buscar o 14 com getDay
  • Vais buscar o 4 da quinta-feira com getDate
  • Decides qual instante é posterior com ===
  • Chamas new Date() sem números, e cada recarregamento traz outra manhã

O que fica quando fechas a página

  • Março é 2 porque janeiro é 0
  • O dia do mês é getDate
  • O dia da semana é getDay, e domingo é 0
  • Dois instantes ordenam-se com o número de getTime
  • A frase que uma pessoa lê escreve o mês um passo à frente do que está guardado, e o objeto fica em 2
  • A seguir vem o objeto Math

🧠 Teste Seu Conhecimento

Pronto para Começar

Teste Seu Conhecimento

Desafie-se com este questionário interativo e veja o quão bem você entende o tópico

❓
8
Perguntas
🎯
70%
Para Passar
♾️
∞
Tempo
🔄
∞
Tentativas

📝 Instruções

  • Leia cada pergunta cuidadosamente
  • Selecione a melhor resposta para cada pergunta
  • Você pode refazer o quiz quantas vezes quiser
  • Seu progresso será mostrado no topo