Executando verificação de segurança...
2

De fato lidar corretamente com datas é bem mais complicado do que a maioria das pessoas acha que é - talvez por isso seja tão difícil elas sequer imaginarem o tipo de problemas que podem acontecer, quanto mais as formas de resolver. É verdade também que muitas API's de data existentes não ajudam, o que torna ainda mais importante estudar bem o assunto.

Sobre a solução de somar o offset, existem muitas ressalvas e tem que usar com cautela, pois dependendo do caso pode causar mais problemas ainda. Como estou sem tempo de elaborar um post mais completo, vou deixar alguns links onde eu explico com mais detalhes os poréns desta solução, e vários outros pontos de atenção:

Outro post que pode ajudar é Como trabalhar com timezones sem usar um timestamp?.

Sobre o uso de Date.parse, também existem alguns poréns, porque browsers diferentes podem ou não aceitar formatos diversos, então não é garantido que a mesma string sempre gere a mesma data em todos os casos (por exemplo, "10/02/2020" pode resultar em 2 de outubro ou 10 de fevereiro, dependendo da implementação).

Só pra complementar o post, já escrevi algo a respeito aqui no site, em Lidando com datas em JavaScript (ou "criei uma data, mas mostra um dia a menos").

Também tem muito conteúdo do meu blog que planejo adaptar para o TabNews, mas enquanto isso não acontece, vc pode ver aqui uma lista dos posts relacionados ao tema .

E já que é pra fazer propaganda, este é um livro que escrevi sobre o assunto. Apesar do título (Datas e horas -
Conceitos fundamentais e as APIs do Java
), não é só pra quem programa em Java, pois a primeira parte do livro é mais conceitual e vai servir para qualquer linguagem.

Carregando publicação patrocinada...
1

Que massa isso aqui!

Fico honrado em receber contribuições como a do maniero (que não o conhecia, mas que tem um currículo espetacular), e do kht (que conheço pessoalmente, pois trabalhamos na mesma organização, mas não sabia de seu incrível conhecimento sobre o assunto - enfim que mundo pequeno). Isto é um sinal que estou indo pelo caminho certo :)

No meu trabalho principal sou cientista de dados, mexo com banco de dados, BI, ETL, mas nos últimos 5 anos tenho feito muitos freelas em desenvolvimento Javascript/Typescript/React. Talvez minha experiência em desenvolvimento esteja enviezada com o baixo nível que o mercado de desenvolvimento apresentou nos últimos anos (com a pandemia) trazendo muito programador com pouca experiência para o combate.

Então hoje resolvi postar essa discussão sobre como enfrentei problemas de verdadeiras gambiarras, tanto no backend quanto no frontend, que já me apareceram sobre esse assunto de datas, mas observo que, ainda que estivesse com uma abordagem que está dando certo, certamente há algo melhor a se fazer.

Ah, sobre o uso de Date.parse(), ele está sendo usado no exemplo no lado servidor (Node.js) mas ali o objetivo é tão somente avaliar se a data enviada está no formato desejado (vamos dizer que a API Reference determina que o formato seja string 'YYYY-MM-DD' então é preciso somente garantir esse contrato).

Vou consumir todo esse conteúdo sobre este assunto que você colocou que com certeza será de grande valia!

Obrigado pela contribuição, Hugo!

3

sobre o uso de Date.parse(), ele está sendo usado no exemplo no lado servidor (Node.js) mas ali o objetivo é tão somente avaliar se a data enviada está no formato desejado (vamos dizer que a API Reference determina que o formato seja string 'YYYY-MM-DD' então é preciso somente garantir esse contrato)

Mas da forma que foi feito, o código não garante que a string está no formato YYYY-MM-DD. Por exemplo, se eu passar a string '10/02/2020', vai criar um data referente a 2 de outubro (e não 10 de fevereiro, veja).

Isso porque o Node.js usa a mesma engine do Chrome, e nesta implementação, o formato "XX/XX/XXXX" é interpretado como "mês/dia/ano". Se for para garantir o formato, teria que verificar isso explicitamente (por exemplo, fazendo o split pelo hífen, ou usando regex).


Caraca, onde vc trabalhou? É que conheço mais de um Jefferson :-)

1

Nossa, você tem total razão, e consultando o último projeto que trabalhei com isso, de fato tem uma regex que faz essa validação.

Sou o Jefferson Felix. Trabalho no TRT-SP há mais de 11 anos, já passei pela sustentação do PJe mas hoje estou no BI (apesar de sempre ter trabalho com isso mesmo) :)

Abraço!