Pergunta

Minhas configurações de localidade são:

Formato de data curta: dd/mm/aaaa, formato de data longa dd mmmm aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Então, por que

var d = new Date("8/10/2009")
alert(d.toLocaleDateString()); 

vomitar em 10 de agosto de 2009

ou

var d = new Date("15/10/2009");

vomitar em 10 de março de 2010

Foi útil?

Solução

De onde o sistema obtém a data de 10 de agosto deve ser óbvio, mesmo que você ainda não entenda o porquê. Mas é menos fácil entender como é "10 de março de 2010" de "15/10/2009". Então, caso você tenha perdido:

Suponha que, por um momento, o objeto de data já tenha decidido que está usando um formato "m/d/y", então a primeira parte (15) é o mês. Como isso lidaria com isso? O que acontece é que ele começa com o ano e cria a data "1/1/2009". Em seguida, avança para o 15º mês, para dar março de 2010. Adicione os 10 dias e aí está.

Para o "porquê" disso, observe que você teve que ligar toLocaleDateString() para que ele seja produzido em seu formato de localidade específico. Mas o seu new Date() não faz menção semelhante ao local em lugar algum. Portanto, é apenas usar sua cultura embutida invariante.

Outras dicas

Tente isso em vez disso.

var myDate=new Date();
myDate.setFullYear(2010,0,14);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top