Objeto `Date`
Este artigo explica o objeto Date.
Explicaremos o objeto Date passo a passo, desde os mecanismos básicos até as operações mais comuns no trabalho prático, com exemplos concretos.
YouTube Video
Objeto Date
O que é o objeto Date?
O objeto Date do JavaScript é um objeto padrão para manipulação de datas e horários. Internamente, ele gerencia data e hora com base no número de milissegundos decorridos desde 1º de janeiro de 1970, 00:00:00 UTC.
Primeiro, vamos criar um objeto Date representando a data e hora atual, e verificar seu conteúdo.
1const now = new Date();
2console.log(now);- Este código cria um objeto
Dateque representa a data e hora atuais no momento da execução. O formato de exibição depende do ambiente de execução, como o navegador ou o sistema operacional.
Como criar um objeto Date
Objetos Date podem ser criados de várias formas, dependendo da sua necessidade. Um ponto particularmente importante e fácil de errar é que o argumento do construtor para mês começa em zero, ou seja, os meses começam no 0.
1const d1 = new Date(); // Current date and time
2const d2 = new Date("2025-01-01"); // Create from an ISO date string
3const d3 = new Date(2025, 0, 1); // January 1, 2025 (month is zero-based)
4const d4 = new Date(2025, 0, 1, 10, 30); // January 1, 2025, 10:30
5
6console.log(d1, d2, d3, d4);- Em
new Date(ano, mês, dia), o campomêssignifica que0é janeiro e11é dezembro. Se você não compreender esta especificação, pode acabar criando uma data com um mês de diferença sem querer, portanto, preste sempre atenção.
Obtendo cada elemento da data e hora
Você pode obter individualmente o ano, mês, dia, hora e dia da semana de um objeto Date. Todos os métodos para obter informações retornam valores numéricos.
1const date = new Date();
2
3console.log(date.getFullYear()); // Year
4console.log(date.getMonth()); // Month (0-based: 0 = January)
5console.log(date.getDate()); // Day of the month
6console.log(date.getHours()); // Hours
7console.log(date.getMinutes()); // Minutes
8console.log(date.getSeconds()); // Seconds
9console.log(date.getDay()); // Day of the week (0 = Sunday, 6 = Saturday)
- Assim como na criação, tome cuidado que o método
getMonth()também começa em zero. Ao exibir, é comum adicionar 1 ao valor para ajustá-lo. getDay()retorna o dia da semana como um número. 0 representa domingo e 6 representa sábado.
Modificando datas e horários
Date é um objeto mutável, ou seja, você pode alterar seus valores depois. Essa característica é útil, mas você deve tomar cuidado com efeitos colaterais indesejados.
Você pode usar os métodos set para alterar os valores de um objeto Date existente.
1const date = new Date("2025-01-01");
2
3date.setFullYear(2026);
4date.setMonth(5); // June
5date.setDate(15);
6
7console.log(date);- O método
setMonth()também começa em zero. O objeto original é modificado diretamente.
Adicionando e subtraindo datas
É comum realizar cálculos de datas usando milissegundos ou o método setDate(). Para cálculos baseados em dias, usar o setDate() é especialmente intuitivo e seguro.
1const date = new Date("2025-01-01");
2
3date.setDate(date.getDate() + 7);
4console.log(date);- Neste exemplo, estamos calculando a data 7 dias após a data especificada. Mesmo que a soma ultrapasse para um novo mês, o ajuste é feito automaticamente.
Comparando objetos Date
Objetos Date podem ser comparados como números. Isso ocorre porque o valor interno em milissegundos é comparado.
1const a = new Date("2025-01-01");
2const b = new Date("2025-01-10");
3
4console.log(a < b); // true
5console.log(a > b); // false
- Se quiser determinar a ordem das datas, nenhuma conversão adicional é necessária. Você pode usar os operadores de comparação diretamente.
Trabalhando com timestamps (milissegundos)
O Date pode ser convertido para e a partir de números representando milissegundos (timestamps). Esse formato é frequentemente utilizado em APIs ou integrações com bancos de dados.
1const now = Date.now();
2console.log(now);
3
4const date = new Date(now);
5console.log(date);- O método
Date.now()retorna o horário atual em milissegundos. É muito útil quando você deseja armazenar ou comparar o valor como número.
Formatando datas como strings
Exibir um objeto Date como está geralmente resulta em um formato que pode não atender às suas necessidades. Portanto, você deve formatá-lo explicitamente de acordo com suas necessidades.
1const date = new Date("2025-01-01");
2
3const formatted = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
4console.log(formatted);- Formatando manualmente desta forma, você pode controlar totalmente o formato de exibição. No trabalho prático, bibliotecas são frequentemente usadas para esse fim.
Diferença entre UTC e hora local
O objeto Date fornece métodos para manipular tanto hora local quanto UTC. É importante compreender corretamente essa diferença para integrações com servidores e compatibilidade internacional.
1const date = new Date();
2
3console.log(date.getHours()); // Local time (hours)
4console.log(date.getUTCHours()); // UTC time (hours)
- Os métodos
getUTC*sempre retornam valores baseados em UTC. Tome cuidado especial ao manipular dados entre diferentes fusos horários.
Cuidados ao usar objetos Date
Date é conveniente, mas também possui alguns aspectos complicados. Em particular, o mês começando em zero e a mutabilidade costumam causar erros.
Vamos analisar exemplos específicos abaixo para ver os efeitos do fato de Date ser mutável.
1const original = new Date("2025-01-01");
2const copy = new Date(original);
3
4copy.setDate(10);
5
6console.log(original);
7console.log(copy);- Se quiser manter a data e hora originais, sempre crie uma cópia. Apenas estar ciente desse ponto ajudará a evitar bugs indesejados.
Razões pelas quais Date é difícil de lidar e critérios para usar bibliotecas
O objeto Date oferece recursos suficientes como função padrão, mas há situações na prática em que pode ser difícil de usar. Questões típicas incluem meses e dias da semana começando do zero, a tendência de confundir horário local e UTC, e o fato de o objeto ser mutável. Esses problemas podem causar mais bugs à medida que o processamento de datas aumenta.
Date é suficiente para obter e comparar datas de forma simples, mas a legibilidade e a manutenção do código tendem a piorar com mais cálculos de datas ou formatações de exibição.
Se você tem requisitos como os seguintes, pode considerar usar bibliotecas de datas leves como dayjs ou date-fns.
- Você precisa lidar explicitamente com fusos horários
- Você precisa frequentemente realizar cálculos de datas ou intervalos
- Você deseja alterar o formato de exibição de forma flexível
- Você deseja manipular datas e horas de forma imutável
Resumo
Os objetos Date são a ferramenta mais fundamental para manipulação de datas e horários no JavaScript. Compreendendo suas peculiaridades e realizando corretamente a criação, consulta, cálculo e formatação, você pode utilizá-lo de forma segura em trabalhos reais.
Depois de dominar o básico, usar bibliotecas para datas conforme a necessidade é uma escolha prática.
Você pode acompanhar o artigo acima usando o Visual Studio Code em nosso canal do YouTube. Por favor, confira também o canal do YouTube.