Na aplicação construída no curso, a data e demais campos preenchidos são incluídos assim, em NegociacaoController:
adiciona(event: Event) {
event.preventDefault();
const negociacao = new Negociacao(
new Date(this._inputData.value.replace('/-/g', '/')),
parseInt(this._inputQuantidade.value),
parseFloat(this._inputValor.value)
);
this._negociacoes.adiciona(negociacao);
this._negociacoesView.update(this._negociacoes);
console.log(negociacao);
}
Ao preencher e incluir as datas 11/11/2011 e 15/01/2020, por exemplo, o log no console exibe:
Negociacao {_data: Thu Nov 10 2011 22:00:00 GMT-0200 (Horário de Verão de Brasília), _quantidade: 1, _valor: 100}
Negociacao {_data: Tue Jan 14 2020 21:00:00 GMT-0300 (Horário Padrão de Brasília), _quantidade: 2, _valor: 200}
E na tabela, também são exibidas as datas de um dia antes do digitado, ou seja, 10/11/2011 e 14/01/2020, pelo código no template() em NegociacaoView:
<td>${negociacao.data.getDate()}/${negociacao.data.getMonth()+1}/${negociacao.data.getFullYear()}</td>
Observando principalmente os detalhes do log, vê-se que as datas recuaram algumas horas referentes ao timezone/fuso horário, e por isso resultaram no dia anterior.
Como tratar adequadamente este problema?
Nota: Vi esse mesmo problema reportado no fórum há uma ano atrás, mas o tópico ficou sem solução porque a situação não foi apresentada com detalhes e código.