2009
Manipulação e validação de datas é um assunto chato em qualquer linguagem de programação. Em JavaScript temos ao nosso dispor o objeto Date. Tarefas repetitivas como a validação de datas ou verificação de idade acabam se tornando extremamente maçantes. Esta foi a motivação que me levou a criar o eDate (Easy Date).
Download do eDate
Você pode baixar o eDate aqui. Não sei usar direito o GitHub ainda, então se vocês tiverem qualquer dificuldade é só avisar. Feito o download, é só incluir o arquivo na sua página utilizando uma tag script e começar a usar. eDate não é um plugin de nenhuma biblioteca funcionando com JavaScript puro.
Como funciona?
eDate funciona através de métodos estáticos. Praticamente todos os métodos recebem um objeto Date como argumento. As exceções são os métodos isValid e getNew. Vamos começar por eles.
isValid
Este método serve para determinar se uma data é ou não válida (retornando true / false). Recebe como argumento um objeto que será utilizado para validar a data.
1 2 3 4 5 6 | var result = eDate.isValid({ day: 29, month: 2, year: 2009 }); alert(result); |
A data não é válida porque 2009 não é um ano bissexto. Notem que utilizamos 2 para fevereiro. Uma das inconveniências do objeto date é a sua bizarra atribuição de números aos meses. Janeiro é 0, fevereiro 1, etc. eDate “conserta” isso, fazendo com que janeiro seja 1, fevereiro 2, etc. isValid pode receber parâmetros de outra forma:
1 2 3 4 | var result = eDate.isValid({ 'dd/mm/yyyy': '29/02/2009' }); alert(result); |
Foi por isso que optei em utilizar um objeto como argumento para isValid. No exemplo acima utilizamos a máscara dd/mm/yyyy. É possível também utilizar mm/dd/yyyy e yyyy/mm/dd.
A grande vantagem das máscaras é que, muitas vezes, as datas que manipulamos em páginas estão em um único campo input de um formulário. Pretendo adicionar mais máscaras utilizando expressões regulares no futuro.
getNew
Este método retorna um novo objeto date. A vantagem de utilizar getNew ao invés de new Date é que podemos utilizar as máscaras. Além disso, não precisamos nos preocupar em subtrair o mês.
1 2 3 4 5 6 7 | var d1 = new Date(2009, 11, 13), d2 = eDate.getNew({'dd/mm/yyyy': '13/12/2009'}); if (d1.toString() === d2.toString()) { alert(d2.toString()); } |
getToday
getToday retorna a data atual do seu computador mas com uma diferença: o horário vem zerado (meia-noite):
1 2 | var t = eDate.getToday(); alert(t.toString()); |
Isso é diferente de:
1 2 | var t = new Date(); alert(t.toString()); |
addDays
Este método serve para adicionar ou subtrair dias de um objeto date:
1 2 3 | var d = eDate.getNew({'dd/mm/yyyy': '1/1/2010'}); eDate.addDays(d, -1); alert(d.toString()); |
Criamos um objeto date através de eDate.getNew(). Depois utilizamos o método addDays para subtrair um dia do objeto. Percebam que o objeto em si foi manipulado por referência.
diffDays
Caso você precise saber a diferença em dias de uma data para outra:
1 2 3 4 5 | var diff = eDate.diffDays( eDate.getNew({'dd/mm/yyyy': '03/03/2010'}), eDate.getNew({'dd/mm/yyyy': '20/02/2010'}) ); alert(diff); |
Neste caso a primeira data está 11 dias no futuro em relação a segunda. Se invertéssemos a ordem das datas, o resultado seria -11. Se as datas fossem iguais o resultado seria 0.
isOverAge
Este método permite verificar, por exemplo, se alguém é ou não maior de idade:
1 2 3 4 5 | var result = eDate.isOverAge( eDate.getNew({'dd/mm/yyyy': '20/10/1985'}), 18 ); alert(result); |
O primeiro argumento é um objeto date, o segundo o número de anos que deve ser utilizado para a comparação. Uma gama de websites exige que o usuário informe sua idade antes de liberar o acesso. É uma política um tanto quanto duvidosa porque o usuário pode mentir a idade ou alterar a data do seu computador, já que as datas geradas pelo JavaScript dependem do horário do computador do usuário.
Sugestões e melhorias
Por enquanto é isso que a o eDate faz. Penso em adicionar métodos e resolver bugs conforme a necessidade surgir. Aguardo comentários e sugestões.
Nenhum comentário.
Comente!