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

resolvendo o "problema" do Date()

Na atividade 9 da Aula 3 do curso de JavaScript Avançado I o professor apresenta a seguinte forma de criar uma data:

let data = new Date(2016,11,12); 

Sendo ano, mês e dia. Dessa forma o Date identifica o mês 11 como sendo dezembro, até ai ok.

O professor pede para que convertemos o valor que recebemos do formulário, que esta em string "2016-11-12" para esse padrão apresentado acima.

A maneira como ele passou para fazermos isso foi a seguinte:

let data = new Date(
                ...this._inputData.val()
                .split("-")
                .map((item,indice) => item - indice % 2)
            );

Onde nos aproveitamos do map para e do % para identificar cada item do array e subtrair 1 do mês, para termos o mês de novembro quando o string for "2016-11-12", enquanto tentava fazer, antes de ver a solução apresentada pelo professor, cheguei nesse resultado:

let data = this._inputData.val().split("-");
let dataInt = new Date(data[0]-0,data[1]-1,data[2]-0);

Dessa forma eu consegui alcançar o mesmo resultado, minha dúvida é, existe alguma desvantagem em fazer dessa forma?

3 respostas
solução!

Fala aí Pedro, tudo bem? Bom, parabéns por ter feito de uma forma diferente, muito bom.

Sobre a sua implementação, não acho que precisa fazer o -0, você pode simplesmente omití-los:

let dataInt = new Date(data[0], data[1] - 1, data[2]);

O único problema que talvez possa acontecer é caso seu split não possua os indíces do array, exemplo:

2016-01

Nesse exemplo, o array teria apenas duas posição: 0 e 1, portanto, a 2 daria algum problema (o que também aconteceria com o map).

Talvez, um if resolva o problema:

let data = this._inputData.val().split("-")
let dataInt
if (data.length === 3) {
    dataInt = new Date(data[0], data[1] - 1, data[2]);
}

Só iria criar uma data caso o array tenha as três e exatas posições.

Espero ter ajudado.

Opa Matheus. valeu!

Então, o -0 é para transformar a informação de string para number, pois até então seria uma necessidade para conseguir criar o Date dessa forma. Mas testei no console, e vi que não é necessário mesmo!

Sobre o if, realmente não pensei nessa possibilidade, vou criar esse if e um com o exemplo que tu passou "2016-01"

Valeu mesmo a atenção, ajudou muito, grande abraço!

Magina, sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.