Em muitos formulários, é comum a necessidade de preencher automaticamente um campo de data e hora com base em outro. Por exemplo, em uma aplicação de agendamento de eventos, ao selecionar a data e hora de início, pode ser interessante preencher automaticamente o campo de término com uma hora a mais. Neste post, vamos ver como fazer isso de maneira simples usando JavaScript.
O Desafio
Imagine que você tenha dois campos de data e hora em um formulário: um para o início do evento (dataIni
) e outro para o término (dataFin
). O objetivo é que, ao selecionar o valor de dataIni
, o campo dataFin
seja automaticamente preenchido com uma hora a mais.
Como Resolver
Podemos fazer isso utilizando o evento change
do JavaScript, que detecta quando o valor do campo de entrada é alterado. A partir daí, podemos manipular o valor do primeiro campo e ajustá-lo para o segundo campo.
Exemplo de Código
Aqui está o código completo para realizar essa tarefa:
<div class="mb-3 col-md-6">
<label class="form-label" for="dataIni">Início*</label>
<input type="datetime-local" id="dataIni" name="dataIni" class="form-control" required="" aria-describedby="emailHelp" placeholder="">
<div id="emailHelp" class="form-text text-muted">Data e Hora do Evento.</div>
</div>
<div class="mb-3 col-md-6">
<label class="form-label" for="dataFin">Término*</label>
<input type="datetime-local" id="dataFin" name="dataFin" required="" class="form-control" aria-describedby="emailHelp" placeholder="">
<div id="emailHelp" class="form-text text-muted">Opcional.</div>
</div>
<script>
document.getElementById('dataIni').addEventListener('change', function() {
const dataIni = new Date(this.value); // Pega o valor do campo inicial como objeto Date
if (!isNaN(dataIni.getTime())) { // Verifica se a data é válida
dataIni.setHours(dataIni.getHours() + 1); // Adiciona 1 hora
// Formata a data para o formato `YYYY-MM-DDTHH:MM`
const dataFin = document.getElementById('dataFin');
const localISOTime = dataIni.toLocaleString('sv-SE', { timeZoneName: 'short' }).replace(' ', 'T');
dataFin.value = localISOTime.slice(0, 16); // Formata sem segundos
}
});
</script>
Como Funciona
- Evento
change
: OaddEventListener
detecta quando o usuário seleciona uma data e hora no campodataIni
. - Criação do Objeto
Date
: A partir do valor inserido, criamos um objetoDate
com o JavaScript. - Adição de uma Hora: Usamos o método
setHours()
para adicionar uma hora ao valor original dedataIni
. - Formatação para
datetime-local
: Utilizamos o métodotoLocaleString()
para ajustar o fuso horário local e formatar a data de forma compatível com o campodatetime-local
. - Preenchimento do Campo
dataFin
: O valor formatado é atribuído ao campodataFin
, preenchendo-o automaticamente com a data e hora ajustadas.
Considerações
- Fuso Horário: Este código leva em consideração o fuso horário local do navegador, garantindo que o horário exibido esteja correto para o usuário.
- Validação de Data: A validação de data é feita para garantir que o valor inserido seja válido antes de aplicar a alteração.
Conclusão
Esse é um exemplo simples de como preencher um campo de data e hora automaticamente com base em outro, utilizando JavaScript e a funcionalidade dos campos datetime-local
. Esse tipo de automação é útil para melhorar a experiência do usuário e evitar erros no preenchimento de formulários.