Por que o Javascript trata dias e meses de maneira diferente?

42

Percebi que em JavaScript, ao criar a Date, os meses são baseados em zero e os dias não.

Por exemplo:

var foo = new Date(2012, 1, 1)

produz 01 de fevereiro de 2012

Por que é isso?

surfitscrollit
fonte
6
months = ['Jan', 'Feb',..., 'Nov', 'Dec']; month = months[date.getMonth()];
zzzzBov

Respostas:

50

Provavelmente a idéia é que os meses sejam considerados um índice em uma matriz de nomes de meses, enquanto os dias são simplesmente "contados".

thorsten müller
fonte
21
Onde isso faz sentido do ponto de vista da resposta, é uma loucura pensar que essa lógica existe há quanto tempo e eu nunca a questionei antes.
rlemon
2
@rlemon O fato de que você nunca questionou que a lógica antes só prova que faz sentido :)
dasblinkenlight
14
FWIW, eu nunca pensei que isso fizesse muito sentido. O processamento de datas em JavaScript sempre foi algo que me fez estremecer, porque geralmente esquecia coisas assim até começar a depurar resultados estranhos.
FrustratedWithFormsDesigner
2
FWIW, eu não sou desenvolvedor de front-end e nem sempre tenho que lidar com datas em Javascript, além das ocasionaisnew Date().getTime()
rlemon
20
Quando se trata de Javascript, "é por isso que eles fizeram isso" e "isso faz sentido" são duas coisas que você raramente ouve em conjunto.
Tridus
14

Também pode ser que as datas Javascript tenham o objetivo de imitar datas java. Da mesma forma, o Java usou um mês baseado em zero desde o início.

API do JDK v1.0.2: Date.getMonth ()

Danny Kirchmeier
fonte
6
E a especificação java reflete a estrutura C tm. Veja também stackoverflow.com/questions/344380/…
35
Isso não quer dizer que a API Java Data é um terrivelmente bom exemplo de bom design ;-)
Joachim Sauer