1
resposta

Data totalmente errada no console

Bom dia,

Diferente do que foi apresentado, o mês no meu console aparece como +2 acrescido. a Data e ano também são alterados. Por exemplo , ao inserir 12/11/2020 , o retorno no console é " JAN 11 2021"

Isso ocorre apenas quando tento utilizar o spread operator. Caso não utilize, a data retorna com o erro esperado, apenas o mês +1. Por exemplo, ao inserir 12/11/2020, o retorno no console é " DEC 11 2020

class NegociacaoController{

  constructor(){

    let $ = document.querySelector.bind(document);
    this._inputData = $("#data");
    this._inputQuantidade = $('#quantidade');
    this._inputValor = $("#valor");
  }

  adiciona(event){
    event.preventDefault();

    let data = new Date(
      ...this._inputData.value
        .split('-')
        // .map(function(item, indice){
        //   if (indice == 1){
        //     return item - 2;
        //   }
        //   return item;
        // })
      )
    console.log(data)
  }
}

Tentei corrigir o primeiro modo, utilizando o map como explicado, porém, o resultado não é o esperado.

adiciona(event){
    event.preventDefault();

    let data = new Date(
      ...this._inputData.value
        .split('-')
        .map(function(item, indice){
          if (indice == 0){
            return item-1
          }
          if (indice == 1){
            return item - 2;
          }
          if (indice == 2){
            return item -1;
          }
          return item;
        })
      )
    console.log(data)
  }

Dessa forma, ao inserir 12/11/2020 o retorno foi nov 10 2019 ( Brasilia Standar Time ), ou seja, não consegui resolver o problema apresentado e com o spread operator o comportamento foi diferente do que o esperado.

1 resposta

Oi, Diego, tudo bem?

Quando utilizamos array, a primeira posição será 0. Como queremos pegar a segunda posição do array, que é o mês, devemos utilizar o número 1 indicando essa posição. No mesmo sentido para as demais posições, posição 1 e 2 do seu array (mas não queremos manipular o valor ano, nem o de dia). Mas nós queremos manipular o mês, então, ficaria dessa forma:

let data = new Date(
      ...this._inputData.value
        .split('-')
        .map(function(item, indice){
          if (indice == 1){
            return item-1
          }
          return item;
        })
      )
    console.log(data)
  }

Na aula o professor irá uma forma mais reduzida e elegante de fazer esse índice utilizado a sobra de divisão, dessa forma:

adiciona(event) {
    event.preventDefault();
   let data = new Date(...this._inputData.value.split('-').map(function(item, indice){
     return item - indice % 2
   }))
   console.log(data)
  }

Ambas dão os mesmos resultados.

Se ficou alguma dúvida é só falar!