Data Válida //Repositório JavaScript

Descrição

Validação de data.
Criado: 2006.04.25

Código (Download)

//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/geral/is-date [rev. #1]

isDate = function(y, m, d){
        if(typeof y == "string" && m instanceof RegExp && d){
            if(!m.test(y)) return 1;
            y = RegExp["$" + d.y], m = RegExp["$" + d.m], d = RegExp["$" + d.d];
        }
        d = Math.abs(d) || 0, m = Math.abs(m) || 0, y = Math.abs(y) || 0;
        return arguments.length != 3 ? 1 : d < 1 || d > 31 ? 2 : m < 1 || m > 12 ? 3 : /4|6|9|11/.test(m) && d == 31 ? 4
        : m == 2 && (d > ((y = !(y % 4) && (y % 1e2) || !(y % 4e2)) ? 29 : 28)) ? 5 + !!y : 0;
};

/*
Simple way, but without warnings
isDate = function(y, m, d){
    var o = new Date(y, --m, d);
    return o.getFullYear() == y && o.getMonth() == m && o.getDate() == d;
}
*/

Exemplo (Exemplo)

<script type="text/javascript">
//<![CDATA[

function getMessage(r){
    return r == 0 ? "Valid date"
    : r == 1 ? "Invalid date format"
    : r == 2 ? "Invalid day"
    : r == 3 ? "Invalid month"
    : r == 4 ? "In April, June, September and November the month has only 30 days"
    : r == 5 ? "February has only 28 days"
    : r == 6 && "It's leap year, February has only 29 days";
};

var tests = [
    isDate("22/07/1984", /^([0-9]{1,2})[\/]([0-9]{1,2})[\/]([0-9]{1,4})$/, {d: 1, m: 2, y: 3}),
    isDate("1984-07-22", /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/, {d: 3, m: 2, y: 1}),
    isDate("07-22-1984", /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/, {d: 3, m: 2, y: 1}),
    isDate(2000, 1, 32),
    isDate(2000, 0, 1),
    isDate(2000, 4, 31),
    isDate(2001, 2, 29),
    isDate(2004, 2, 30)
];

for(var i = -1, l = tests.length; ++i < l;)
    document.write(getMessage(tests[i]), "<br>");

//]]>
</script>

Ajuda

isDate(y: Integer, m: Integer, d: Integer): Integer
Verifica uma data e retorna 0 se for válida ou um dos códigos de erro abaixo.
y
ano
m
mês
d
dia
isDate(date: String, matcher: RegExp, map: Object): Integer
Verifica uma data e retorna 0 se for válida ou um dos códigos de erro abaixo.
date
data em forma de string
matcher
expressão regular encarregada de achar e guardar o dia, mês e ano
map
objeto contendo a posição onde se encontra cada componente da data na expressão regular. Seu formato é o seguinte: {d: posicaoDoDia, m: posicaoDoMes, y: posicaoDoAno}

Códigos de retorno

  • 0 = Data válida
  • 1 = Formato de data inválido (regular expression falhou ou quantidade de argumentos != 3)
  • 2 = Dia não está entre 1 e 31
  • 3 = Mês não está entre 1 e 12
  • 4 = Nos meses de abril, junho, setembro e novembro não existe o dia 31
  • 5 = O mês de fevereiro só tem 28 dias
  • 6 = Anos bissexto, o mês de fevereiro só tem 29 dias

Ranque (Votos: 37)

3.81