JavaScript Date
JavaScript Date
**Sumário**
1. **Introdução**
1.1 O Mundo das Datas em JavaScript
1.2 Importância do Objeto Date
5. **UTC e Timestamp**
5.1 Explorando Coordenadas Temporais Universais
5.2 Utilizando Timestamps para Precisão
6. **Getters em Detalhes**
6.1 Acessando Componentes Temporais com Getters
6.2 Estratégias para Leitura Clara do Código
7. **Getters de Conversão**
7.1 Transformando Dados Temporais em Formatos Comuns
7.2 Aplicações Práticas em Projetos Reais
12. **Conclusão**
12.1 Recapitulando Aprendizados
Página | 1
12.2 Inspiração para Explorações Futuras
Este livro oferece uma jornada abrangente desde os conceitos básicos até
aplicações avançadas na manipulação de datas em JavaScript, proporcionando
uma base sólida para programadores de todos os níveis. Com práticas,
exercícios desafiadores e aplicações do mundo real, visa aprimorar suas
habilidades na manipulação eficiente de datas em seus projetos JavaScript.
Página | 2
**1. Introdução**
Ao final desta introdução, você terá uma compreensão sólida do papel central
que o objeto Date desempenha no ecossistema JavaScript, preparando o
terreno para a exploração mais aprofundada dos tópicos subsequentes.
Página | 3
O objeto Date em JavaScript é uma entidade poderosa que permite aos
desenvolvedores lidar com informações temporais de maneira eficiente.
Representando datas e horários, o objeto Date oferece uma variedade de
métodos para realizar operações como criar novas datas, obter informações
específicas, modificar valores temporais e muito mais.
```javascript
// Criando uma nova instância do objeto Date com a data e hora atuais
let dataAtual = new Date();
console.log(dataAtual);
```
Este exemplo simples ilustra como criar uma nova data utilizando o construtor
do objeto Date. Veremos como obter a data e hora atuais, fornecendo uma
visão prática de como o objeto Date é utilizado para representar informações
temporais.
```javascript
// Obtendo o ano atual
let anoAtual = dataAtual.getFullYear();
Página | 4
console.log(`Ano: ${anoAtual}, Mês: ${mesAtual}`);
```
PRATICANDO
Crie um programa que utilize o objeto Date para criar uma nova data
representando o momento atual. Exiba essa data formatada no console.
```javascript
// Solução
let dataAtual = new Date();
console.log(`Data Atual: ${dataAtual.toLocaleString()}`);
```
```javascript
// Solução
let dataAtual = new Date();
Crie um programa que utilize o objeto Date para calcular e exibir a data
resultante de adicionar 7 dias à data atual.
```javascript
// Solução
let dataAtual = new Date();
let dataFutura = new Date(dataAtual.getTime() + 7 * 24 * 60 * 60 * 1000); //
Adicionando 7 dias em milissegundos
Página | 5
```
- 25 de Dezembro de 2023
- Seu próximo aniversário
Desenvolva um programa que, dado duas datas inseridas pelo usuário, calcule
e exiba a diferença em dias entre essas duas datas.
Crie um programa que utilize o objeto Date para determinar e exibir o último
dia do mês atual.
Ao final deste capítulo, os leitores terão uma compreensão sólida dos conceitos
fundamentais do objeto Date, capacitando-os a utilizar essa ferramenta
essencial com confiança em seus projetos JavaScript.
Página | 6
Neste capítulo, aprofundaremos nas razões fundamentais que tornam o objeto
Date essencial em programação, explorando necessidades comuns e
contextualizando cenários práticos nos quais a manipulação de datas
desempenha um papel crucial.
```javascript
// Registro de atividade de login
function realizarLogin(usuario) {
let eventoLogin = {
acao: 'Login',
data: new Date(),
usuario: usuario
};
Página | 7
```javascript
// Agendamento de notificação para daqui a 3 dias
function agendarNotificacao() {
let dataAgendada = new Date();
dataAgendada.setDate(dataAgendada.getDate() + 3);
```javascript
// Solução
function registrarEvento(acao, usuario) {
let evento = {
acao: acao,
data: new Date(),
usuario: usuario
};
Página | 8
Desenvolva uma função que utilize o objeto Date para agendar a execução de
uma tarefa específica, exibindo a data agendada no console.
```javascript
// Solução
function agendarTarefa(descricao, diasParaExecucao) {
let dataAgendada = new Date();
dataAgendada.setDate(dataAgendada.getDate() + diasParaExecucao);
Crie uma função que utilize o objeto Date para verificar se um conteúdo
específico, como uma senha temporária, expirou ou não, exibindo o resultado
no console.
```javascript
// Solução
function verificarExpiracaoSenha(tempoExpiracaoHoras) {
let dataCriacaoSenha = new Date('2023-01-01T12:00:00'); // Data de
criação da senha
let dataAtual = new Date();
// Verificando a expiração
if (dataAtual - dataCriacaoSenha > tempoExpiracaoHoras * 60 * 60 * 1000)
{
console.log('A senha expirou.');
} else {
console.log('A senha ainda está válida.');
}
}
Página | 9
**Exercícios Propostos: Necessidades Comuns em Programação**
Desenvolva uma função que utilize o objeto Date para registrar atividades em
um sistema de gerenciamento. Cada atividade deve conter informações como
ação realizada, data e usuário envolvido. Após criar a função, registre duas
atividades diferentes.
Crie uma aplicação simples que permita aos usuários agendarem eventos para
uma data específica. Utilize o objeto Date para manipular e exibir as
informações de agendamento. A aplicação deve possibilitar o agendamento de
pelo menos três eventos distintos.
Elabore uma função que utilize o objeto Date para gerenciar reservas em um
calendário. A função deve permitir que usuários consultem a disponibilidade e
efetuem reservas em datas específicas, garantindo que não haja conflitos.
```javascript
// Exemplo: Verificando a expiração de uma oferta
Página | 10
let dataExpiracaoOferta = new Date('2022-02-28');
let dataAtual = new Date();
```javascript
// Exemplo: Exibindo o horário atual em uma página web
let dataAtual = new Date();
let elementoHorario = document.getElementById('horario');
```javascript
// Solução
function verificarExpiracaoPromocao(dataExpiracao) {
let dataAtual = new Date();
Página | 11
// Utilizando a função para verificar a expiração de uma promoção com data de
expiração em 2023-02-28
verificarExpiracaoPromocao(new Date('2023-02-28'));
```
```javascript
// Solução
function verificarStatusEntrega(dataEstimadaEntrega) {
let dataAtual = new Date();
Crie uma função que utilize o objeto Date para exibir uma mensagem de boas-
vindas dinâmica com base no horário do dia (manhã, tarde ou noite).
```javascript
// Solução
function mensagemBoasVindas() {
let dataAtual = new Date();
let horaAtual = dataAtual.getHours();
Página | 12
// Utilizando a função para exibir uma mensagem de boas-vindas dinâmica
mensagemBoasVindas();
```
Esses exercícios resolvidos demonstram como o objeto Date pode ser aplicado
em cenários práticos, desde o controle de expiração de conteúdo até a
personalização de mensagens com base no horário do dia. Isso proporciona
uma compreensão mais aprofundada de como manipular datas pode ser
valioso em diversas situações no desenvolvimento de software.
Desenvolva uma função que utilize o objeto Date para verificar se um cupom
de desconto em uma aplicação de compras online ainda é válido. Considere a
data de expiração do cupom e exiba a mensagem correspondente no console.
Elabore uma função que utilize o objeto Date para gerenciar prazos em
projetos. A função deve exibir se uma determinada fase de um projeto está
atrasada ou dentro do prazo com base na data estimada de conclusão.
Crie uma função que, ao receber a data de nascimento de uma pessoa, utilize
o objeto Date para exibir uma mensagem personalizada de feliz aniversário no
dia correto, considerando a data atual.
Página | 13
Neste capítulo, exploraremos a arte de criar datas personalizadas a partir do
zero utilizando o objeto Date em JavaScript. Compreenderemos os parâmetros
do construtor e desenvolveremos estratégias eficientes para a construção de
datas personalizadas.
**Exemplo Prático: Criando uma Data com Ano, Mês e Dia Específicos**
```javascript
// Criando uma data para 25 de dezembro de 2022
let dataPersonalizada = new Date(2022, 11, 25);
```javascript
// Criando uma data para 10 de fevereiro de 2023, às 15:30:45
let dataPersonalizada = new Date(2023, 1, 10, 15, 30, 45);
Página | 14
Compreender como esses parâmetros interagem é crucial para criar datas
precisas em diferentes contextos. Ao explorar esses exemplos, os
desenvolvedores ganham uma visão mais profunda da manipulação eficaz do
construtor do objeto Date.
PRATICANDO
Crie uma função que utilize o objeto Date para criar e exibir uma data
específica, como o dia do seu aniversário, utilizando os parâmetros adequados.
```javascript
// Solução
function criarDataAniversario() {
let dataAniversario = new Date(1990, 4, 15); // Ano, mês (0-11), dia
console.log(`Data de Aniversário: ${dataAniversario.toLocaleString()}`);
}
Desenvolva uma função que utilize o objeto Date para criar e exibir uma data
com um horário específico, como a hora do seu nascimento.
```javascript
// Solução
function criarDataNascimento() {
let dataNascimento = new Date(1990, 4, 15, 8, 30, 0); // Ano, mês (0-11),
dia, hora, minuto, segundo
console.log(`Data de Nascimento: ${dataNascimento.toLocaleString()}`);
}
Elabore uma função que utilize o objeto Date para criar e exibir uma data para
um evento futuro, como uma viagem planejada.
```javascript
// Solução
Página | 15
function criarDataEventoFuturo() {
let dataEvento = new Date(2023, 8, 1); // Ano, mês (0-11), dia
console.log(`Data do Evento: ${dataEvento.toLocaleString()}`);
}
Crie uma função que utilize o objeto Date para calcular a idade de uma pessoa
com base na data de nascimento. A função deve exibir a idade no console.
Desenvolva uma aplicação simples que utilize o objeto Date para criar uma
contagem regressiva para um evento futuro específico. A aplicação deve exibir
os dias, horas, minutos e segundos restantes até o evento.
Página | 16
**4.2 Estratégias para Construção Eficiente de Datas**
```javascript
// Criando uma data para 7 dias no futuro utilizando timestamps
let timestampFuturo = Date.now() + 7 * 24 * 60 * 60 * 1000; // Adicionando
7 dias em milissegundos
let dataFutura = new Date(timestampFuturo);
```javascript
// Ajustando a hora de uma data existente utilizando getters e setters
let dataAtual = new Date();
dataAtual.setHours(18); // Ajustando a hora para 18:00
Neste exemplo, utilizamos `setHours()` para ajustar a hora da data atual para
18:00.
Página | 17
de timestamps ou utilizando métodos getters e setters para ajustes
específicos. Essa flexibilidade é crucial na construção eficiente de datas em
JavaScript.
PRATICANDO
Desenvolva uma função que utilize timestamps para calcular a idade de uma
pessoa com base na data de nascimento. A função deve exibir a idade no
console.
```javascript
// Solução
function calcularIdade(dataNascimento) {
let timestampNascimento = dataNascimento.getTime(); // Obtendo o
timestamp da data de nascimento
let timestampAtual = Date.now(); // Obtendo o timestamp atual
Elabore uma aplicação simples que utilize timestamps para criar uma
contagem regressiva para um evento futuro específico. A aplicação deve exibir
os dias, horas, minutos e segundos restantes até o evento.
```javascript
// Solução
function contagemRegressivaParaEvento(dataEvento) {
let timestampEvento = dataEvento.getTime(); // Obtendo o timestamp do
evento
let timestampAtual = Date.now(); // Obtendo o timestamp atual
Página | 18
let minutosRestantes = Math.floor((diferencaTimestamps % (60 * 60 *
1000)) / (60 * 1000));
let segundosRestantes = Math.floor((diferencaTimestamps % (60 * 1000)) /
1000);
Crie uma função que, dadas duas datas como parâmetros, utilize timestamps
para calcular e exibir a diferença de dias entre essas datas.
Crie uma aplicação de agenda dinâmica que, utilizando getters do objeto Date,
exiba informações sobre o dia atual, como data completa, dia da semana e
mês.
Página | 19
Desenvolva uma função que, ao receber a data de início e a duração de uma
promoção, utilize timestamps para verificar se a promoção está vigente ou
expirou.
O UTC é uma escala de tempo que elimina os desafios associados aos fusos
horários locais, proporcionando uma medida universalmente aceita e
consistente. Ele serve como uma base para coordenadas temporais em todo o
mundo.
```javascript
// Criando uma data e convertendo para UTC
let dataLocal = new Date(); // Data e hora locais
let dataUTC = dataLocal.toUTCString();
Página | 20
Neste exemplo, criamos uma data local e a convertemos para UTC usando
`toUTCString()`. Isso destaca a diferença entre a representação local e a
universal.
Ao explorar o UTC, é vital entender como lidar com diferenças de fuso horário
ao exibir ou manipular datas em um contexto global.
```javascript
// Obtendo a hora atual em um fuso horário específico (UTC+3)
let dataAtualUTC3 = new Date();
dataAtualUTC3.setUTCHours(dataAtualUTC3.getUTCHours() + 3);
PRATICANDO
Desenvolva uma função que, ao receber uma data local, converta-a para a
representação em Coordenadas Temporais Universais (UTC).
```javascript
// Solução
function converterParaUTC(dataLocal) {
let dataUTC = dataLocal.toUTCString();
console.log(`Data e Hora Locais: ${dataLocal.toLocaleString()}`);
console.log(`Data e Hora em UTC: ${dataUTC}`);
}
Página | 21
**Exercício 2: Visualização de Diferenças de Fuso Horário**
```javascript
// Solução
function ajustarParaFusoHorario(data, deslocamentoHoras) {
let dataAjustada = new Date(data);
dataAjustada.setUTCHours(dataAjustada.getUTCHours() +
deslocamentoHoras);
console.log(`Data Original: ${data.toLocaleString()}`);
console.log(`Data Ajustada para UTC+${deslocamentoHoras}: $
{dataAjustada.toUTCString()}`);
}
// Utilizando a função para ajustar uma data para um fuso horário específico
ajustarParaFusoHorario(new Date(), 5);
```
Elabore uma função que compare duas datas, uma fornecida em Coordenadas
Temporais Universais (UTC) e outra em horário local. A função deve exibir a
diferença de tempo entre essas datas.
Página | 22
**Exercício 4: Visualização Dinâmica de Fusos Horários em um Mapa
Interativo**
```javascript
// Calculando a idade com base na data de nascimento utilizando timestamps
function calcularIdade(dataNascimento) {
let timestampNascimento = dataNascimento.getTime(); // Obtendo o
timestamp da data de nascimento
let timestampAtual = Date.now(); // Obtendo o timestamp atual
Página | 23
calcularIdade(new Date(1990, 4, 15));
```
```javascript
// Agendando uma notificação para 30 minutos no futuro utilizando
timestamps
function agendarNotificacao() {
let timestampFuturo = Date.now() + 30 * 60 * 1000; // Adicionando 30
minutos em milissegundos
let dataFutura = new Date(timestampFuturo);
PRATICANDO
Desenvolva uma função que, ao receber duas datas como parâmetros, utilize
timestamps para calcular e exibir a diferença de tempo em dias, horas,
minutos e segundos.
```javascript
// Solução
Página | 24
function calcularDiferencaTempo(dataInicio, dataFim) {
let timestampInicio = dataInicio.getTime();
let timestampFim = dataFim.getTime();
let diferencaEmMilissegundos = timestampFim - timestampInicio;
Crie uma função que, ao receber um número de horas como parâmetro, utilize
timestamps para agendar um evento exatamente esse número de horas no
futuro.
```javascript
// Solução
function agendarEventoFuturo(horas) {
let timestampFuturo = Date.now() + horas * 60 * 60 * 1000; //
Adicionando horas em milissegundos
let dataFutura = new Date(timestampFuturo);
Página | 25
Desenvolva uma função que, ao receber duas datas como parâmetros, utilize
timestamps para calcular e exibir a diferença de tempo em dias, horas,
minutos e segundos.
```javascript
// Solução
function calcularDiferencaTempo(dataInicio, dataFim) {
let timestampInicio = dataInicio.getTime();
let timestampFim = dataFim.getTime();
let diferencaEmMilissegundos = timestampFim - timestampInicio;
Crie uma função que, ao receber um número de horas como parâmetro, utilize
timestamps para agendar um evento exatamente esse número de horas no
futuro.
```javascript
// Solução
function agendarEventoFuturo(horas) {
let timestampFuturo = Date.now() + horas * 60 * 60 * 1000; //
Adicionando horas em milissegundos
let dataFutura = new Date(timestampFuturo);
Página | 26
Estes exercícios resolvidos proporcionam prática na utilização de timestamps
para cálculos precisos de diferenças de tempo e agendamento de eventos
futuros. Ao aplicar esses conceitos, os desenvolvedores fortalecem suas
habilidades na manipulação eficiente de datas em JavaScript.
Imagine uma aplicação de agenda dinâmica. Crie uma função que, ao receber
um evento e a data/hora desejada, utilize timestamps para agendar o evento
exatamente na data/hora especificada.
Página | 27
Neste capítulo, aprofundaremos o entendimento sobre getters no contexto do
objeto Date em JavaScript. Getters são métodos que nos permitem obter
informações específicas sobre componentes temporais de uma data. Vamos
explorar como acessar esses componentes e estratégias para tornar o código
mais legível.
```javascript
// Utilizando principais getters para obter componentes temporais
let dataAtual = new Date();
Página | 28
Além dos principais getters, o objeto Date oferece getters para componentes
mais específicos, como `getMilliseconds()` para obter os milissegundos e
`getDay()` para obter o dia da semana.
```javascript
// Utilizando getters adicionais para componentes específicos
let dataAtual = new Date();
console.log(`Milissegundos: ${milissegundos}`);
console.log(`Dia da Semana: ${diaSemana}`);
```
PRATICANDO
```javascript
// Solução
function calcularIdade(dataNascimento) {
let dataAtual = new Date();
Página | 29
}
if (meses < 0) {
anos -= 1;
meses += 12;
}
Crie uma função que, ao receber uma data, utilize os getters para exibir a data
por extenso, incluindo o nome do mês e o dia da semana.
```javascript
// Solução
function exibirDataPorExtenso(data) {
let diasSemana = ["Domingo", "Segunda-feira", "Terça-feira", "Quarta-
feira", "Quinta-feira", "Sexta-feira", "Sábado"];
let meses = ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho",
"Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"];
Crie uma função que, ao receber duas datas, utilize os getters para calcular e
retornar a diferença de dias entre essas datas.
Página | 30
**Exercício 2: Verificador de Fim de Semana**
Desenvolva uma função que, ao receber uma data, utilize o getter `getDay()`
para verificar se é um sábado ou domingo. A função deve retornar verdadeiro
se for fim de semana e falso caso contrário.
Elabore uma função que, ao receber uma data, utilize os getters para extrair a
hora e o minuto, e exiba esses valores em um formato legível.
Desenvolva uma função que, ao receber uma data, utilize os getters para
extrair o dia, o mês e o ano, e retorne uma string com a data no formato
"DD/MM/AAAA".
```javascript
// Nomenclatura significativa ao utilizar getters
let dataAtual = new Date();
Página | 31
let diaAtual = dataAtual.getDate();
let horaAtual = dataAtual.getHours();
let minutoAtual = dataAtual.getMinutes();
let segundoAtual = dataAtual.getSeconds();
```javascript
// Agrupamento lógico ao utilizar getters
function exibirDetalhesData(data) {
let ano = data.getFullYear();
let mes = data.getMonth() + 1;
let dia = data.getDate();
let hora = data.getHours();
let minuto = data.getMinutes();
let segundo = data.getSeconds();
Página | 32
```javascript
// Comentários explicativos ao utilizar getters
let dataAtual = new Date();
// Obtendo o ano
let anoAtual = dataAtual.getFullYear();
Página | 33
```javascript
// Utilizando getters de conversão para formatar data de maneira
personalizada
let dataAtual = new Date();
```javascript
// Utilizando getters de conversão para formatar hora de maneira
personalizada
let dataAtual = new Date();
```javascript
// Utilizando getters de conversão para incluir fuso horário
let dataAtual = new Date();
Página | 34
let dataHoraFormatada = dataAtual.toLocaleString('pt-BR', opcoesFormato);
PRATICANDO
```javascript
// Solução
function dataPorExtensoComDiaSemana(data) {
let opcoesFormato = { weekday: 'long', year: 'numeric', month: 'long', day:
'numeric' };
let dataFormatada = data.toLocaleDateString('pt-BR', opcoesFormato);
// Utilizando a função para exibir a data por extenso com dia da semana
dataPorExtensoComDiaSemana(new Date());
```
Crie uma função que, ao receber uma hora, utilize os getters de conversão
para transformar a hora em formato de 24 horas, incluindo os segundos.
```javascript
// Solução
function horaFormato24HorasComSegundos(data) {
let opcoesFormato = { hour: 'numeric', minute: 'numeric', second:
'numeric', hour12: false };
let horaFormatada = data.toLocaleTimeString('pt-BR', opcoesFormato);
Página | 35
console.log(`Hora Formatada: ${horaFormatada}`);
}
Elabore uma função que, ao receber uma data, utilize os getters de conversão
para transformar a data e a hora, incluindo um fuso horário personalizado.
```javascript
// Solução
function dataHoraComFusoHorario(data) {
let opcoesFormato = { timeZone: 'America/New_York' };
let dataHoraFormatada = data.toLocaleString('pt-BR', opcoesFormato);
// Utilizando a função para exibir a data e hora com fuso horário personalizado
dataHoraComFusoHorario(new Date());
```
Crie uma função que, ao receber duas datas, utilize os getters de conversão
para calcular e exibir a diferença de dias entre essas datas em formato de
semanas.
Página | 36
Elabore uma função que, ao receber uma data, utilize os getters de conversão
para transformar a data em um formato de registro de atualização, incluindo
um fuso horário personalizado.
Crie uma aplicação que, ao receber uma hora no futuro, utilize os getters de
conversão para calcular e exibir a contagem regressiva até esse momento, em
formato de horas, minutos e segundos.
```javascript
// Exemplo de aplicação prática em um calendário de eventos
function formatarEvento(evento) {
let dataEvento = new Date(evento.data);
Página | 37
// Utilizando a função para exibir um evento formatado
formatarEvento({ nome: 'Conferência de Tecnologia', data: '2024-03-15' });
```
```javascript
// Exemplo de aplicação prática em uma contagem regressiva para lançamento
de produto
function exibirContagemRegressiva(dataLancamento) {
let agora = new Date();
let tempoRestante = dataLancamento - agora;
PRATICANDO
Página | 38
**Exercício 1: Lista de Tarefas com Prazos**
```javascript
// Solução
function exibirListaTarefas(listaTarefas) {
for (const tarefa of listaTarefas) {
let dataTarefa = new Date(tarefa.prazo);
let dataFormatada = dataTarefa.toLocaleDateString('pt-BR');
console.log(`Tarefa: ${tarefa.nome} - Prazo: ${dataFormatada}`);
}
}
```javascript
// Solução
function gerarRelatorioDesempenho(dados) {
let dataAtualizacao = new Date();
let dataFormatada = dataAtualizacao.toLocaleString('pt-BR');
console.log(`Relatório Atualizado em: ${dataFormatada}`);
Página | 39
**Exercício 1: Planejamento de Evento com Contagem Regressiva**
Página | 40
**8.1 Modificando Datas com Setters**
```javascript
// Utilizando setters para modificar o dia de uma data
let data = new Date();
console.log(`Data Atual: ${data.toLocaleDateString()}`);
```javascript
// Utilizando setters para modificar ano e mês de uma data
let data = new Date();
console.log(`Data Atual: ${data.toLocaleDateString()}`);
Página | 41
Compreender as diferentes maneiras de aplicar setters permite aos
desenvolvedores personalizar ajustes temporais conforme as necessidades
específicas de seus projetos, proporcionando flexibilidade e controle na
manipulação de datas.
PRATICANDO
```javascript
// Solução
function adicionarDias(data, quantidadeDias) {
data.setDate(data.getDate() + quantidadeDias);
return data.toLocaleDateString();
}
Elabore uma função que, ao receber uma data, utilize setters para alterar o
mês da data para o mês seguinte.
```javascript
// Solução
function proximoMes(data) {
data.setMonth(data.getMonth() + 1);
return data.toLocaleDateString();
}
Página | 42
Crie uma função que, ao receber uma data, utilize setters para definir a data
como o dia 15 do mesmo mês.
```javascript
// Solução
function definirDiaEspecifico(data) {
data.setDate(15);
return data.toLocaleDateString();
}
Crie uma função que, ao receber uma data e um novo horário para um
compromisso, utilize setters para ajustar a hora e os minutos da data para o
horário especificado.
Desenvolva uma função que, ao receber uma data, utilize setters para
configurar a data como o último dia do mesmo mês.
Crie uma função que, ao receber uma data, utilize setters para configurar a
hora da data como 00:00:00, representando o início do dia.
Página | 43
Desenvolva uma função que, ao receber uma data, utilize setters para alterar
simultaneamente o ano para o próximo e o mês para janeiro.
```javascript
// Armadilha comum ao compartilhar referências de datas
let dataOriginal = new Date('2024-01-01');
let dataCompartilhada = dataOriginal;
```javascript
// Armadilha ao modificar diretamente uma data
let dataOriginal = new Date('2024-01-01');
Página | 44
let dataModificada = dataOriginal;
PRATICANDO
Desenvolva uma função que receba uma data e crie uma cópia independente,
evitando assim referências compartilhadas.
```javascript
// Solução
function copiarDataIndependente(dataOriginal) {
return new Date(dataOriginal.getTime());
}
Crie uma função que receba uma data e um número de dias, evitando
modificações diretas e retornando uma nova data com os ajustes necessários.
```javascript
// Solução
Página | 45
function adicionarDias(dataOriginal, quantidadeDias) {
let dataNova = new Date(dataOriginal.getTime());
dataNova.setDate(dataNova.getDate() + quantidadeDias);
return dataNova;
}
Dada uma função que realiza modificações em uma data, refatore a função
para garantir que a data original não seja modificada inadvertidamente.
```javascript
// Função original que modifica a data diretamente
function modificarData(data, dias) {
data.setDate(data.getDate() + dias);
}
Crie uma função que receba duas datas e verifique se elas compartilham a
mesma referência. Se compartilharem, realize uma cópia independente de uma
das datas.
Página | 46
```javascript
// Implemente a função que verifica e realiza cópia independente
function verificarEConsertarReferencias(data1, data2) {
// Implemente a solução aqui
}
verificarEConsertarReferencias(dataOriginal, dataCompartilhada);
```javascript
// Exemplo de cronograma de eventos com exibição dinâmica de datas
Página | 47
const eventos = [
{ nome: 'Apresentação de Produto', data: new Date('2024-04-
01T15:00:00') },
{ nome: 'Sessão de Perguntas e Respostas', data: new Date('2024-04-
01T16:30:00') },
{ nome: 'Networking e Coquetel', data: new Date('2024-04-
01T18:00:00') }
];
function exibirCronograma(eventos) {
const agora = new Date();
exibirCronograma(eventos);
```
```javascript
// Exemplo de personalização de formato de data em uma aplicação web
const dataAtual = new Date();
// Formato padrão
console.log(`Formato Padrão: ${dataAtual.toLocaleString()}`);
// Formato personalizado
const formatoPersonalizado = new Intl.DateTimeFormat('pt-BR', {
year: 'numeric',
month: 'long',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
timeZoneName: 'short'
Página | 48
});
console.log(`Formato Personalizado: $
{formatoPersonalizado.format(dataAtual)}`);
```
PRATICANDO
Desenvolva uma função que receba uma lista de eventos com suas respectivas
datas e exiba apenas os eventos futuros, indicando o tempo restante até cada
um.
```javascript
// Solução
function exibirEventosFuturos(eventos) {
const agora = new Date();
exibirEventosFuturos(eventos);
Página | 49
```
Elabore uma função que crie um seletor de data interativo em uma aplicação
web, permitindo que o usuário escolha uma data e exibindo-a dinamicamente.
```javascript
// Solução
function criarSeletorData() {
const seletorData = document.createElement('input');
seletorData.type = 'date';
seletorData.addEventListener('change', () => {
const dataSelecionada = new Date(seletorData.value);
console.log(`Data Selecionada: $
{dataSelecionada.toLocaleDateString()}`);
});
document.body.appendChild(seletorData);
}
Crie uma função que receba uma lista de eventos com suas datas e retorne a
lista ordenada por data, do evento mais próximo ao mais distante.
Desenvolva uma página web simples que exiba uma lista de eventos futuros,
utilizando HTML, CSS e JavaScript para integrar e exibir as datas
dinamicamente.
Página | 50
**Exercício 4: Contagem Regressiva para Evento**
Elabore uma função que, dado um evento futuro, exiba uma contagem
regressiva em dias, horas, minutos e segundos até a data do evento.
Crie uma função que, ao carregar uma página web, verifique se há eventos
futuros em menos de 24 horas e exiba uma mensagem de aviso para o
usuário.
```javascript
// Exemplo de seletor de data interativo utilizando date-fns
import { format, parse } from 'date-fns';
seletorData.addEventListener('input', () => {
const dataSelecionada = parse(seletorData.value, 'yyyy-MM-dd', new
Date());
resultadoData.textContent = `Data Selecionada: ${format(dataSelecionada,
'dd/MM/yyyy')}`;
});
```
Página | 51
Desenvolver um temporizador contínuo em uma aplicação web pode
proporcionar aos usuários uma representação visual do tempo passando.
Vamos explorar um exemplo básico utilizando JavaScript puro.
```javascript
// Exemplo de temporizador contínuo em JavaScript puro
const temporizadorDisplay =
document.getElementById('temporizadorDisplay');
function atualizarTemporizador() {
const agora = new Date();
temporizadorDisplay.textContent = agora.toLocaleTimeString();
}
setInterval(atualizarTemporizador, 1000);
```
PRATICANDO
```javascript
// Solução
import { format, parse } from 'date-fns';
seletorData.addEventListener('input', () => {
const dataSelecionada = parse(seletorData.value, 'yyyy-MM-dd', new
Date());
resultadoData.classList.add('fade-out');
setTimeout(() => {
Página | 52
resultadoData.textContent = `Data Selecionada: $
{format(dataSelecionada, 'dd/MM/yyyy')}`;
resultadoData.classList.remove('fade-out');
}, 300);
});
```
```javascript
// Solução
const temporizadorDisplay =
document.getElementById('temporizadorDisplay');
const dataAlvo = new Date('2024-12-31T23:59:59');
function atualizarTemporizador() {
const agora = new Date();
const diferenca = dataAlvo - agora;
setInterval(atualizarTemporizador, 1000);
```
Página | 53
Desenvolva um cronômetro em uma aplicação web que permita aos usuários
iniciar, pausar e reiniciar. Utilize HTML, CSS e JavaScript para criar uma
interface amigável.
Crie uma página web que exiba uma contagem regressiva para os próximos
feriados nacionais. Utilize APIs de feriados para obter as datas.
PRATICANDO
Página | 54
Neste segmento, enfrentaremos desafios teóricos para aprofundar a
compreensão dos conceitos fundamentais relacionados à manipulação de datas
em JavaScript. Estes desafios visam não apenas testar o conhecimento, mas
também aprimorar a capacidade de raciocínio crítico sobre questões específicas
associadas a datas.
Imagine que você está desenvolvendo uma aplicação que utiliza dados
temporais de uma API de terceiros. Discuta os desafios potenciais associados
aos fusos horários ao integrar esses dados em sua aplicação e proponha
estratégias para lidar com tais desafios.
Página | 55
**Exercício Prático 1: Calculadora de Idade**
*Exemplo de Uso:*
```javascript
const dataNascimento = new Date('1990-05-15');
const idadeAtual = calcularIdade(dataNascimento);
console.log(`Idade Atual: ${idadeAtual} anos`);
```
Crie uma aplicação simples que permita aos usuários agendar eventos
recorrentes, como reuniões semanais. Utilize o objeto `Date` para lidar com a
programação dos eventos e forneça uma interface amigável para a interação
do usuário.
Página | 56
Ao praticar com esses desafios e exercícios, os desenvolvedores terão a
oportunidade de consolidar e aplicar de forma efetiva os conhecimentos
adquiridos sobre a manipulação de datas em JavaScript.
```javascript
function calcularIdade(dataNascimento) {
const agora = new Date();
const anoNascimento = dataNascimento.getFullYear();
const anoAtual = agora.getFullYear();
return idade;
}
```
A solução para este exercício envolve a criação de uma aplicação web que
utiliza HTML, CSS e JavaScript para manipular eventos recorrentes. A
abordagem pode variar dependendo das tecnologias específicas escolhidas.
```html
<!-- Exemplo de Estrutura HTML -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Agendamento de Eventos</title>
<link rel="stylesheet" href="styles.css">
</head>
Página | 57
<body>
<div id="app">
<!-- Interface da Aplicação -->
</div>
<script src="script.js"></script>
</body>
</html>
```
```javascript
// Exemplo de Implementação JavaScript
const prazos = [
{ tarefa: 'Projeto A', dataLimite: new Date('2024-02-28') },
{ tarefa: 'Reunião de Equipe', dataLimite: new Date('2024-03-10') },
// Adicionar mais tarefas conforme necessário
];
function destacarTarefasProximas() {
const agora = new Date();
prazos.forEach((tarefa) => {
const tempoRestante = tarefa.dataLimite - agora;
destacarTarefasProximas();
```
**12. Conclusão**
Página | 58
*12.1 Recapitulando Aprendizados*
Página | 59
Neste capítulo, forneceremos uma lista de leituras recomendadas e links úteis
para que os leitores possam aprofundar seus conhecimentos sobre a
manipulação de datas em JavaScript.
3. **"You Don't Know JS" (Série) by Kyle Simpson:** Esta série de livros
explora profundamente diversos tópicos do JavaScript, incluindo objetos,
escopos, closures e muito mais.
2. **[Moment.js Documentation](https://momentjs.com/docs/):** A
documentação do Moment.js é útil para aqueles que desejam explorar uma
biblioteca popular para manipulação de datas.
3. **[date-fns Documentation](https://date-fns.org/docs/):** A
documentação do date-fns oferece informações detalhadas sobre uma
biblioteca alternativa para manipulação de datas.
Página | 60