Uma DSL para manipular datas em JavaScript
Hoje precisei realizar uma operação que, inicialmente, me
parecia bastante simples: a partir de um objeto Date do
JavaScript, queria calcular um outro objeto Date, sendo que o segundo
representaria uma data 5 dias no passado. Fácil? Não foi. É verdade,
eu estava sem uma boa referência por perto, mas a verdade é que
não consegui descobrir como fazê-lo em poucas linhas.
Uma nova busca no Google e encontro a DateJS, que é exatamente
o que eu procurava: uma DSL para manipulação de datas em JavaScript.
Como ela resolveu meu problema? Em 1 linha. Os exemplos abaixo mostram a utilização da biblioteca a partir da linha de comando, com o Rhino. Na segunda linha do exemplo está a solução para o meu problema inicial.
js> load('date.js')
js> (5).days().ago()
Wed Feb 06 2008 20:47:28 GMT-0200 (BRST)
js> Date.today().is().monday()
true
js> Date.parse('next saturday')
Sat Feb 16 2008 00:00:00 GMT-0200 (BRST)
Faça o download e confira como é fácil utilizá-la! O site oficial mostra outros exemplos interessantes.

February 11th, 2008 às 11:26 pm
Adorei a biblioteca, muito intuitiva. Só pra ver se entendi, o javascript não dá suporte pra data ou dá de uma maneira deselegante?
February 11th, 2008 às 11:39 pm
Dá suporte, sim, mas não considero muito fácil de usar para “aritmética de datas”, que é o que eu estava tentando fazer. Alguns exemplos de uso mostram como ela possui alguns métodos pouco intuitivos (repare nos resultados de cada método):
Algumas coisas estranhas:
getYear()?getMonth()volta o número 1, e não 2, se estamos em fevereiro?getSeconds()retorna, exatamente?Nada que um pouco de Google não pudesse resolver, mas a DateJS me parece incomparável a qualquer outra solução “manual” do meu problema.
February 12th, 2008 às 8:10 pm
Bem parecido com o Java, ou seja, nada deduzível ou intuitivo.
July 12th, 2008 às 1:04 pm
Simples: today.getYear() - Retorna o total de anos a partir do ano 1900 108
today.getMonth() - Retorna o mês atual (array com elemento inicial 0) 1
Onde, 0 –> Janeiro 1 –> Fevereiro 2 — > Março
etc…
July 12th, 2008 às 1:48 pm
Rômulo, pode até ser simples depois de ler a explicação, mas não é intuitivo.