Função para validar data em JavaScript
No JavaScript, não existe um método nativo para validar uma data. Portanto, é necessário criar uma função personalizada para verificar o dia, mês e ano da data informada. Logo abaixo, temos o código de uma função de validação para datas, incluindo comentários descritivos e seguindo boas práticas de programação:
function validaData (valor) {
// Verifica se a entrada é uma string
if (typeof valor !== 'string') {
return false
}
// Verifica formado da data
if (!/^\d{2}\/\d{2}\/\d{4} $/.test(valor)) {
return false
}
// Divide a data para o objeto "data"
const partesData = valor.split('/')
const data = {
dia: partesData[0],
mes: partesData[1],
ano: partesData[2]
}
// Converte strings em número
const dia = parseInt(data.dia)
const mes = parseInt(data.mes)
const ano = parseInt(data.ano)
// Dias de cada mês, incluindo ajuste para ano bissexto
const diasNoMes = [ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]
// Atualiza os dias do mês de fevereiro para ano bisexto
if (ano % 400 === 0 || ano % 4 === 0 && ano % 100 !== 0) {
diasNoMes[2] = 29
}
// Regras de validação:
// Mês deve estar entre 1 e 12, e o dia deve ser maior que zero
if (mes < 1 || mes > 12 || dia < 1) {
return false
}
// Valida número de dias do mês
else if (dia > diasNoMes[mes]) {
return false
}
// Passou nas validações
return true
}
Testando a função de validação:
Abaixo, podemos testar nossa função de validação de data. Experimente informar alguns números com e sem formação, pois a própria função, no momento de validar, verifica o formato da data. Tente alguns números para ver o que acontece:
Como funciona a função de validar data?
Primeiramente, a função validaData()
verifica se o argumento valor
recebido foi fornecido como uma string. Caso não seja, a função retorna false
, indicando que a validação falhou:
if (typeof valor !== 'string') {
return false
}
A próxima etapa da validação utiliza uma expressão regular para verificar se o formato da data fornecida é válido. A expressão regular /^\d{2}\/\d{2}\/\d{4} $/
especifica o padrão da data no formato "dd/mm/aaaa":
- ^: Indica o início da string.
- \d{2}: Indica dois dígitos (representando o dia).
- /: Indica o caractere de barra (/) que separa o dia do mês.
- \d{2}: Indica dois dígitos após a barra (representando o mês).
- /: outro caractere de barra (/) que separa o mês do ano.
- \d{4}: quatro dígitos (representando o ano).
$: final da string.
Se a data não corresponder ao padrão especificado na expressão regular, a função retorna false
, indicando que a validação falhou:
if (!/^\d{2}\/\d{2}\/\d{4} $/.test(valor)) {
return false
}
Se a data passou nas duas verificações anteriores, ela é dividida em três partes (dia, mês e ano) e armazenada em um objeto chamado data:
const partesData = valor.split('/')
const data = {
dia: partesData[0],
mes: partesData[1],
ano: partesData[2]
}
As partes da data (dia, mês e ano) são convertidas de strings para números inteiros usando a função parseInt()
. Isso é necessário porque as comparações seguintes serão feitas com números, não com strings:
const dia = parseInt(data.dia)
const mes = parseInt(data.mes)
const ano = parseInt(data.ano)
Então, é criado um array chamado diasNoMes
que contém o número de dias de cada mês:
const diasNoMes = [ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]
Logo em seguida, se o ano fornecido for bissexto então o número de dias de fevereiro (índice 2 no array) deve atualizado para 29, já que fevereiro tem 29 dias em um ano bissexto. Para verificar se é um ano bisexto ele deve ser divisível por 4 e não por 100, exceto quando é divisível por 400:
if (ano % 400 === 0 || ano % 4 === 0 && ano % 100 !== 0) {
diasNoMes[2] = 29
}
Agora, ocorrem as validações específicas da data:
- Primeiro, verifica-se se o mês está entre 1 e 12 (valores válidos para os meses).
- Também é verificado se o dia é maior que zero, já que não existe o dia 0.
- Se alguma das duas condições acima for falsa, a função retorna
false
, indicando que a validação falhou. - Caso contrário, é realizada outra verificação para garantir que o dia não ultrapasse o número máximo de dias para o mês em questão consultando o array
diasNoMes
. - Se essa verificação também falhar, a função retorna
false
, indicando que a validação falhou.
if (mes < 1 || mes > 12 || dia < 1) {
return false
}
else if (dia > diasNoMes[mes]) {
return false
}
Se a data passar por todas as validações anteriores, isso significa que ela é válida e a função retorna true
:
return true
Conclusão
Em suma, a função JavaScript validaData()
é uma eficaz para verificar a validade de datas fornecidas em formato "dd/mm/aaaa". Com etapas bem definidas, ela realiza verificações quanto ao tipo da entrada, formato correto, dias em cada mês e a ocorrência de anos bissextos. Ao seguir essas etapas, a função garante que apenas datas válidas sejam aceitas.
O que achou do artigo?
Escreva um comentário, deixe-me saber o que achou do artigo. Se tens uma dúvida basta perguntar:
Resposta ao comentário:
10 Comentários