É muito comum utilizar um campo Seletor de Datas no formulário. É onde você pode por exemplo:
? Coletar prazos de projetos
? Marcar registros
? Realizar reservas
Em algum momento você poderá precisar calcular o intervalo entre duas datas. Nesta situação, pode ser necessário computar a diferença levando conta até os minutos.
Este artigo vai guiar você para lidar com este processo. Tenha em mente que este guia não pretende ajudar você a construir o formulário inteiro, apenas te orientar a calcular a diferença entre dois campos de data.
Primeiro, temos que falar sobre Epoch Time. O que é isso?
Uma Unix epoch (ou Unix time ou POSIX time ou Unix timestamp) é o número de segundos que se passaram desde o dia primeiro de janeiro de 1970 (à meia-noite UTC/GMT), sem contar os chamado segundos bissextos (em ISO 8601: 1970-01-01T00:00:00Z). A rigor, o epoch equivale a Unix 0 (meia noite 1/1/1970), mas “epoch” frequentemente é usado como sinônimo de ‘Unix time’.
Esta definição é citada com base neste link: https://www.epochconverter.com/
É importante que você esteja familiarizado com o Widget Cálculo de Formulário. Se não estiver, nós recomendamos fortemente que você conheça melhor a ferramenta ao ler este guia.
Veja abaixo uma tabela mostrando a divisão completa de cada unidade de tempo comum em segundos:
Unidades de tempo habituais | Segundos |
1 minuto | 60 segundos |
1 hora | 3600 segundos |
1 dia | 86400 segundos |
1 mês (30.44 dias) | 2629743 segundos |
1 ano (365.24 dias) | 31556926 segundos |
Observe a conversão das unidades acima, ela será usada nos nossos cálculos daqui em diante. Agora, vamos conferir alguns pontos chave a respeito de como o Widget Cálculo de Formulário é usado, por que algumas fórmulas são necessárias, e assim por diante:
? O intervalo de tempo entre duas datas precisará estar sempre convertida formato Epoch Time. Por que? Porque quando subtraímos duas datas, a diferença padrão é na unidade dos dias. Para converter um dia em Epoch Time (segundos) nós multiplicamos por 86400.
Fórmula:
(Data2–Data1)*86400
? O resto em um cálculo é importante!
Os cálculos que você vai fazer frequentemente serão de divisão, e os restos são essenciais para se obter o número de minutos, horas, dias e meses restantes.
Para por em perspectiva, considere como exemplo uma quantidade de 12345 segundos em epoch time. É o equivalente a 3 horas, 25 minutos e 45 segundos.
Para obter o resultado de 3 horas:
123453600=3.4291666667OU 3 R. 1545
E para obter o resultado de 25 minutos:
154560=25.75OU 25 R. 45
? O widget não oferece uma maneira de obter o resto exato de uma operação de divisão. É possível que você esteja familiarizado com % ou Módulo em linguagens de programação, mas isto não está disponível neste widget. Como alternativa, vamos usar os decimais do quociente para obter o resto.
406=6 R. 4
406=6.6666666667
As duas respostas acima estão corretas e a partir daí obtemos o seguinte:
Número inteiro: 6
Casas Decimais: 0.6666666667
Resto: 4
Para converter os decimais em resto, vamos multiplicar mais uma vez pelo divisor, que é 6. Então:
0.6666666667×6=4.0000000002
Então arredondamos para 4.
Vamos usar a função floor() para obter o número inteiro a partir do resto. Vale a pena mencionar que floor() é arredondar para baixo, ceil() é arredondar para cima, e round() é arredondar para o número inteiro mais próximo. Isto irá então ser subtraído do quociente para se obter a casa decimal (como no exemplo acima).
Guia relacionado: Form Calculation Math Function Reference
? A diferença de epoch time deve ser dividida por 2 divisores:
– 31556926 é o divisor para Ano, Mês e Dia.
– 86400 é o divisor para Hora e Minuto.
? Oculte os campos que você não quer mostrar no seu formulário. Geralmente, você não precisa mostrar todos os seus widgets de cálculo (ex. a diferença de epoch time, o campo do resto, e assim por diante).
Eis aqui um formulário de demonstração que pode ser usado com este guia: https://www.jotform.com/71752744778975 . Então vamos começar o passo a passo:
1. Adicione todos os campos necessários
? Dois campos de seletores de data
? Widgets Cálculo de Formulário
Sempre são necessários ao menos dois ou três widgets de cálculo – a Diferença em Epoch e o Resto (para designar ano/mês/minuto ou hora/minuto ou ambos). O resto fica ao seu critério e vai depender de cada situação.
Exemplo:
Se você só precisa obter a diferença em horas e minutos, você vai precisar de 4 widgets de cálculo:
– Diferença em Epoch
– Resto para hora/minuto
– Horas
– Minutos
Se você precisa da diferença em meses, dias, horas, minutos, você vai precisar de 7 widgets de cálculo:
– Diferença em Epoch
– Resto para mês/dia
– Resto para hora/minuto
– Meses
– Dias
– Horas
– Minutos
O formulário demo acima usa 13 Widgets de cálculo:
– 3 widgets obrigatórios (Diferença em Epoch e 2 Restos)
– 5 widgets (diferença em anos > meses > dias > horas > minutos)
– 5 widgets (quebrando cada unidade de tempo para anos, meses, dias, horas e minutos)
2. Configurar as propriedades do seletor de data
Abra a janela de propriedades do Seletor de Data e vá para a aba de Horário. Acione o Campo de Horário selecionando SIM. Ajuste a Divisão de Minutos em 1. Então, defina o Formato de Hora em 24 horas.
3. Configure o Widget Cálculo de Formulário para Somente Leitura
Este passo é opcional mas é recomendável para impedir usuários de mudarem o valor por engano ao preencherem o formulário.
4. E vamos para a fórmula
Pegue a fórmula que você precisa para o seu formulário.
Exemplo
Data 1 = 01 Jan , 2017 às 01:05
Date 2 = 30 Jun , 2036 às 20:50
Epoch = 615239100
Fórmula para a diferença em Epoch Time:
(Data2-Data1)*86400
Multiplique a diferença por 86400 para obter o Epoch Time em segundos.
Fórmula para resto (para Anos > Meses > Dias):
(Diferença em Epoch/ 31556926-(
floor(Diferença em Epoch31556926)))*31556926
Pode parecer complicado mas tudo o que estamos fazendo aqui é obtendo o resto. O Epoch Time foi dividido por 31556926 porque é o número de segundos que existem em um ano. Então subtraímos o quociente arredondado do quociente original para obter o valor decimal. Depois, multiplicamos este decimal por 31556926 para chegar ao resto.
Fórmula para Resto (para Horas > Minutos):
(Diferença em Epoch/ 86400–(
floor(Diferença em Epoch86400)))*86400
É a mesma ideia, mas dessa vez dividimos por 86400 para obter o resto de horas/minutos em um dia.
Fórmula para anos:
floor(Diferença em Epoch31556926)
Não tem segredo, é só dividir o Epoch Time por 31556926 e então arredondar para baixo o quociente.
Fórmula para meses:
floor(Resto para A/M/D2629743)
Agora, usamos o campo Resto para A/M/D (ano, mês, dia) e dividimos por 2629743 para obter o número de meses remanescentes.
Fórmula para dias:
floor(((Resto para A/M/D2629743)-Meses)*30.44
Isso tem que ser multiplicado por 30.44 para chegar ao número de dias remanescentes.
Fórmula para horas:
floor(Resto para HH:MM3600)
Divida o Resto para HH:MM por 3600, o número de segundos que existem em uma hora. Então arredonde o resultado para baixo.
Fórmula para minutos:
round(((Resto para HH:MM3600)-Horas)*60)
Em vez de usar floor(), dessa vez vamos usar round(). As unidades de tempo mais altas exigem o uso de floor () para deixar como resto as unidades menores de tempo. Como os minutos já são menores, você já pode simplesmente arredondar pela média.
As próximas 5 fórmulas são opcionais para o caso de necessidade. São as unidades de tempo decompostas.
Anos:
floor(Diferença em Epoch31556926)
Meses:
floor(Diferença em Epoch2629743)
Dias:
floor(Diferença em Epoch86400)
Horas:
floor(Diferença em Epoch3600)
Minutos:
floor(Diferença em Epoch60)
Sim, pode soar confuso à primeira vista, mas assim que você pegar o jeito, principalmente a parte de obter o resto e qual unidade de conversão usar, tudo vai fazer sentido. ?
Clone o formulário demo para obter uma compreensão melhor de como os cálculos acima funcionam.
Guia relacionado: Como clonar um formulário existente pela URL
Comentários e sugestões são bem vindos. Se tiver uma pergunta, escreva para o Forum de Suporte que nós iremos ajudá-lo.
Enviar Comentário: