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

Problemas para exibição de data

Pessoal, não estou conseguindo exibir corretamente a data inserida e não sei o que fiz de errado. Quando tento exibir a data, aparece no console o erro "Uncaught TypeError: data.getDate is not a function at Negociacao.get data [as data] (Negociacao.js:22) at NegociacaoController.adiciona (NegociacaoController.js:17) at HTMLFormElement.onsubmit (index.html:14)"

Segue meu código:

class DateHelper {

        constructor() {

            throw new Error('Esta classe não pode ser instanciada');
        }

    static dataParaTexto(data){

        return `${data.getDate()}/${data.getMonth()}+1/${data.getFullYear()}`;

         }

    static textoParaData(texto){

    return new Date(...texto.split('-').map((item, indice) => item - indice % 2));
    }
}
class Negociacao {

    constructor(data, quantidade, valor){

        this._data = new Date(data.getDate());
        this._quantidade = quantidade;
        this._valor = valor;
        Object.freeze(this);
    }

    get volume(){

            return this._quantidade * this._valor;

        }
    get data() {

        return new Date(data.getDate());
    }

    get valor() {

        return this._valor;
    }

}
class NegociacaoController {

    constructor(){

        let $ = document.querySelector.bind(document);

        this._inputData = $('#data');
        this._inputQuantidade = $('#quantidade');
        this._inputValor = document.querySelector('#valor');
        this._listaNegociacoes = new ListaNegociacoes();
    }

    adiciona(event){

        event.preventDefault();

        console.log(DateHelper.dataParaTexto(this._criaNegociacao().data));

            this._listaNegociacoes.adiciona(this._criaNegociacao());

            this._limpaFormulario();
        }


    _criaNegociacao() {

        return new Negociacao(

            DateHelper.textoParaData(this._inputData.value),
            this._inputQuantidade.value,
            this._inputValor.value

            );
    }


    _limpaFormulario() {


        this._inputData.value = '';
        this._inputQuantidade.value = 1;
        this._inputValor.value = 0.0;

        this._inputData.focus();
    }


}
3 respostas
solução!

Boa noite, Orlando! Como vai?

O problema está na classe Negociacao quando vc retorna a data dentro do método getter data()! Como _data é um atributo da sua classe, então o correto seria fazer return new Date(this._data.getDate()).

class Negociacao {

    get data() {

        return new Date(this._data.getDate());
    }
}

Grande abraço e bons estudos!

Fala, Gabriel! Obrigado pela ajuda, resolveu aqui o problema e acabei percebendo que estava usando os métodos incorretos: getDate() ao invés de getTime().

Por nada, Orlando! Sempre que tiver qualquer dúvida é só mandar aqui no fórum!

Grande abraço e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software