Last active
July 31, 2023 12:21
-
-
Save webarthur/d7f08bbe3007e5f84c5a954f41356833 to your computer and use it in GitHub Desktop.
Função JavaScript para validar datas
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// From: https://devarthur.com/blog/funcao-para-validar-data-em-javascript | |
// Codepen: https://codepen.io/devarthur/pen/vYgBWmv | |
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 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment