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.
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.
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.
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.
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.
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.
<!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.
- O ano inteiro é 2024, não 24
- Dentro do objeto, março é 2
- O 14 vem de
getDatee o 4 da quinta-feira vem degetDay - A hora é 9 e o minuto é 30
- A visita do dia 20 é posterior, a comparação é true e esse dia é 20
- A frase do parágrafo é
2024-3-14e 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 Datea 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
Teste Seu Conhecimento
Desafie-se com este questionário interativo e veja o quão bem você entende o tópico
📝 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