Timestamp e anos bissextos
Algo importante lembrar ao somar, multiplicar datas que estão utilizando timestamp.
Estava precisando criar um jeito de bloquear um campo, por idade, daquelas coisas do tipo menores de 18 invalidam cadastro. Sei já deve ter um monte por aí, não quis me dar ao trabalho de pesquisar no Google e fui colocar em prática algumas conhecimentos antigos de timestamp.
Para quem está começando o timestamp é um inteiro que o valor 0 é a data 1970-01-01T00:00:000Z
e bem util para calculos de datas, mas com um porém interessante.
Vamos começar com o minuto que é o resultado de 1000 milisegundos multiplicado por 60. 60s = 1m.
Agora já começamos com a nossa lógica que estamos acostumados, no caso 1 hora é o equivalente de 60 minutos e para o dia multiplicamos por 24 e um ano por 365. Na matemática temos ((((1000 * 60) * 60) * 24) * 365)
.
Agora é multiplicar por 18 e voilá, temos os 18 anos necessário para subtrair das nossas datas atuais. E pegando a data atual de 03/12/2021 e subtraindo dessa forma a data q recebemos é 08/12/2003 como talvez você tenha notado a subtração não ficou perfeita com o dia da data atual somente o mês e ano.
Cada 4 anos um dia compensando 6 horas de todo ano
A Terra demora 365 dias e 6 horas para completar a rotação ao redor do sol e com isso temos o dia 29 de fevereiro a cada 4 anos compensando o total dessas 6 horas.
Com isso em mente agora vem as formulas para conseguirmos o dia e hora exato.
1º opção: dividir os anos por 4 no nosso caso 18/4 e multiplicar por dias somando ao nosso timestamp original.
2ª opção: somar 6 horas para cada ano. (dia * 365) + (hora * 6)
É isso galera, quando forem lidar com datas e timestamp, geralmente lembrar de como o sistema de datas e timestamp funcionam, elimina um monte de bibliotecas adicionais como o Moment.JS e outras.
Porém é sempre bom lembrar do q já está validado por outros desenvolvedores e das novas APIs de datas em Javascript, mesmo que timestamp tem uma data de validade para funcionar.