1
resposta

[Solução] Bug Data exibindo dia anterior

Reparei que ao colocar uma data, por exemplo, 01/09/2023, é renderizado a data do dia anterior 31/08/2023.

Esse problema é devido à forma como o elemento do tipo "date" do HTML lida com datas. Ele armazena as datas no formato ISO (YYYY-MM-DD), mas não inclui a informação de fuso horário. Quando você cria uma nova data em JavaScript usando essa string ISO, ela é interpretada como meia-noite (00:00:00) no fuso horário local, o que pode resultar em um dia anterior, dependendo do fuso horário do sistema.

Uma solução para garantir que a data seja representada corretamente é adicionar a informação de fuso horário à data antes de formatá-la. Você pode fazer isso definindo a hora para o meio-dia (12:00:00) no fuso horário UTC (que não tem deslocamento de fuso horário) antes de formatar a data. Dessa forma, você garante que a data não seja deslocada devido ao fuso horário local.

Portanto, minha solução foi a seguinte: 1- Criei uma const DataLocal que vai armazenar new Date(${data}T12:00:00Z), ou seja, estou utilizando new Date e passando a props data e o horário de meio dia. 2- Criei outra const agora chamada de dataFormatada que vai armazenar new Date(dataLocal).toLocaleDateString() que vai pegar somente a data e aplicar o toLocaleDateString(). 3- Por fim, foi passado a const dataFormatada que vai conter a data no dia exato escolhid, ficando da seguinte forma <h5>{dataFormatada}</h5>.

Tudo isso foi feito no componente Colaborador ficando da seguinte forma: ` import './Colaborador.css';

interface ColaboradorProps { nome: string imagem: string cargo: string corDeFundo: string data: string }

const Colaborador = ({ nome, imagem, cargo, corDeFundo, data }: ColaboradorProps) => { const dataLocal = new Date(${data}T12:00:00Z); const dataFormatada = new Date(dataLocal).toLocaleDateString();

return (<div className='colaborador'>
    <div className='cabecalho' style={{ backgroundColor: corDeFundo }}>
        <img src={imagem} alt={nome}/>
    </div>
    <div className='rodape'>
        <h4>{nome}</h4>
        <h5>{cargo}</h5>
        <h5>{dataFormatada}</h5>
    </div>
</div>)

}

export default Colaborador `

Talvez, não seja a melhor forma, mas funcionou pra mim.

1 resposta

Oi estudante, tudo bem?

Muito obrigada por compartilhar sua solução para o problema de exibição de datas. O elemento <input> do tipo "date" do HTML realmente não inclui a informação de fuso horário, o que pode resultar em um dia anterior, dependendo do fuso horário do sistema.

A sua solução de definir a hora para o meio-dia (12:00:00) no fuso horário UTC antes de formatar a data é uma ótima maneira de garantir que a data seja representada corretamente.

Um 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