Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

campo Date HTML5

Olá, tenho um campo input do tipo Date em meu html, quando vou o leio com o código:

@Input() data: string;
new Date(data);

eu obtenho uma data com 1 dia de atraso, o pior quando seleciono o dia 1 ele me retorna o ultimo do dia do mês passado. O que posso fazer com isso?

4 respostas

Consegue logar se a string data esta correta? So pra gente isolar se o problema é no campo ou no formato do new Date.

Posta aqui o valor que a data string possui

a string vem correta. Seguindo esse formato

aaaa/mm/dd

acabei de testar em um outro navegador e funcionou perfeitamente. Pode ser a versão do navegador?

Francisco, o construtor Date se comporta realmente de forma estranha:

new Date('1997-10-15');
//Saída:
Tue Oct 14 1997 22:00:00 GMT-0200 (Horário brasileiro de verão)

Uma solução pode ser fazer o seguinte, levando em conta que sua string de data está vindo no formato especificado por você (aaaa/mm/dd):

new Date(...data.split('/'));
// Saída:
Sat Nov 15 1997 00:00:00 GMT-0200 (Horário brasileiro de verão)

Abraços

solução!

Meu chute é que vc está tendo problemas com timezones. Da documentacao:

[...] given an ISO format such as "2014-03-07" it will assume a time zone of UTC. Therefore Date objects produced using those strings will represent different moments in time [...]

Uma opcao seria forcar o timezone:

new Date('1997-10-15 GMT-0300')

Outra opcao é passar separamente como o Carlos sugeriu. Só cuidado que aí o mês começa em 0 então precisa subtrair 1 (repara que no exemplo o mes 10 retornou Novembro).

campos = data.split('/');
new Date(campos[0], campos[1] - 1, campos[2]);

Ou se quiser apenas uma representacao simples da data sem manipula-la pra calculos etc, pode ser mais interessante vc guardar 3 inteiros ou uma string. O Date é bem complexo e essa bagunça de timezones só vai te atrapalhar.