Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] new Date não aceita string

Tentei passar a string convertida para a classe new Date(), mas o método está retornando data inválida.

//criando a expressão regular
const exp = /-/g;
//passando a string
const date = new Date(this.inputData.value.replace(exp, ','));
console.log(date);

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Li na documentação do método new Date até aceita o formato usado pelo instrutor (YYYY, MM, DD), mas os valores devem ser informados como inteiros separados por vírgula, e não como uma string.

O que fazer nesse caso? Terei que separar os valores de ano, mês e dia, converter em inteiro e depois concatenar para o método date? Por que isto funcionou para o instrutor e pra mim não?

1 resposta
solução!

Descobri que a sintaxe utilizada pelo instrutor

const exp = /-/g;
const date = new Date(dataString.replace(exp, ','));

não funciona apenas no Safari Versão 15.6.1 (15613.3.9.1.16, 15613). Rodou normal no chrome. O fato é que na documentação do do método new Date () não consta a forma de String utilizada pelo instrutor:

new Date()
new Date(value)
new Date(dateString)
new Date(dateObject)

new Date(year, monthIndex)
new Date(year, monthIndex, day)
new Date(year, monthIndex, day, hours)
new Date(year, monthIndex, day, hours, minutes)
new Date(year, monthIndex, day, hours, minutes, seconds)
new Date(year, monthIndex, day, hours, minutes, seconds, milliseconds)

Date()

Conforme a documentação, para ser utilizada uma string, deve ser informada a hora. Caso a hora não seja informada, o javascript vai assumir que a hora informada é 00:00. O problema disso é que no Brasil os fuso-horários são -3 ou -4 UTC, o que faz com o próprio javascript assuma que a data é um dia anterior à informada.

A solução que encontrei (gambiarra, na verdade), foi informar uma data padrão (meio dia), para todas as negociações, prevenindo este problema.

const date = new Date(dataString + 'T12:00');