Data de formatação de JavaScript estranhamente
-
20-09-2019 - |
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
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);