Ultimo Aggiornamento: 15 Settembre 2021
I moduli fanno molto spesso affidamento al campo Selettore Data, ad esempio per:
- Valutare i tempi di esecuzione di progetti
- Gestire registrazioni
- Gestire prenotazioni
Ti capiterà sicuramente prima o poi, di dover calcolare la differenza tra due date. In base al tipo di utilizzo per cui il modulo viene creato, potresti aver bisogno di calcolare con precisione la differenza, tra due date addirittura in termini di minuti.
Questo articolo non ha la pretesa di spiegarti come realizzare interamente il tuo modulo, ma ti darà un’idea di come effettuare calcoli con date e orari su JotForm.
Prima di tutto, dobbiamo parlare di Epoch Time. Di cosa si tratta?
Anche conosciuta come Unix epoch (o Unix time o POSIX time o Unix timestamp) questa misura rappresenta il numero di secondi trascorsi dall’1 Gennaio 1970 (mezzanotte UTC/GMT), senza tenere in considerazione i secondi bisestili (in ISO 8601: 1970-01-01T00:00:00Z). Letteralmente parlando, l’epoch è la data 0 di Unix (mezzanotte 1/1/1970), ma viene spesso utilizzata come sinonimo di “data Unix”.
Definizione citata da https://www.epochconverter.com
È importante che tu abbia una certa confidenza con il widget Calcolatore per Moduli. Se non ti senti ancora molto sicuro, ti consigliamo vivamente di leggere la relativa guida, per essere sicuro di comprendere bene quello che andremo a fare nel corso di questo articolo. Fatta questa doverosa premessa, passiamo ora ad analizzare i primi concetti fondamentali.
Innanzitutto andiamo a scomporre ogni unità di tempo trasformandola in secondi, che ci troveremo poi ad utilizzare per i nostri calcoli nel corso dell’articolo:
Unità di tempo
1 minuto | 60 secondi |
1 ora | 3600 secondi |
1 giorno | 86400 secondi |
1 mese (30,44 giorni) | 2629743 secondi |
1 anno (365,24 giorni) | 31556926 secondi |
Fissate bene a mente le conversioni appena viste perché tra poco inizieremo ad utilizzarle. Fissiamo inoltre alcuni concetti chiave su come utilizzare il widget Calcolatore per Modulo, perché sono necessarie certe formule, e così via:
- La differenza va calcolata in formato Epoch Time. Perché? Ciò va fatto perché quando si va a sottrarre una data a un’altra data, la differenza è in giorni. Per convertire un giorno in Epoch Time (secondi), andremo a moltiplicare per 86400.
Formula:
(Data2–Data1)*86400- I resti sono importanti! La maggior parte dei tuoi calcoli con le date, includerà divisioni e il resto delle divisioni è fondamentale per ottenere i mesi, giorni, ore, e minuti in eccesso.
Ad esempio prendiamo il valore Epoch Time 123456. Esso è l’equivalente di 3 giorni, 25 minuti e 45 secondi.
Il risultato di 3 ore si ottiene facendo:
12345/3600=3,4291666667 O 3 R. 1545
E il risultato di 25 minuti si ottiene facendo:
1545/60=25,75 O 25 R. 45
- Il widget non offre un modo di ottenere il resto esatto di una divisione. Alcuni di voi troveranno familiare l’operazione % o MOD comune nella maggior parte dei linguaggi di programmazione, ma tale operazione non è disponibile nel widget di calcolo. Come alternativa, utilizziamo la parte decimale del quoziente per ottenere il resto.
Esempio:
40/6=6 R. 4
40/6=6.6666666667
Entrambe le risposte sopra sono corrette e scomponendole otteniamo:
Numero intero: 6
Parte decimale: 0.6666666667
Resto: 4
Per convertire la parte decimale in un resto, dobbiamo semplicemente moltiplicarla per il divisore che nel nostro esempio è 6. Quindi avremo:
0.6666666667x6=4.0000000002
Che arrotondiamo a 4.
Utilizzeremo la funzione floor() per ottenere la parte intera del quoziente. Ricordiamo che la funzione floor() arrotonda per difetto, la funzione ceil() arrotonda per eccesso, e la funzione round() arrotonda per difetto o per eccesso in base al valore del decimale. Il valore ottenuto sarà poi sottratto dal quoziente per ottenere la parte decimale (come mostrato nell’esempio sopra).
Guida correlata: Funzioni Matematiche di Calcolo di riferimento
- La differenza in termini di epoch time tra due date, deve essere divisa per due divisori:
– 31556926 è il divisore per Anno, Mese e Giorno
– 86400 è il divisore per Ora e Minuto
- Nascondi i campi che non vuoi mostrare sul tuo modulo. Normalmente non ti servirà mostrare i widget di calcolo che utilizzi per calcolare ad esempio le differenze tra date in termini di epoch time, i resti, e così via.
Ecco il modulo demo che verrà utilizzato in questa guida:
https://www.jotform.com/71752744778975
Iniziamo subito!
1. Aggiungi tutti i campi necessari
- Due campi Selettore Data
- Alcuni widget Calcolatore per Modulo
Dovrai aggiungere solitamente almeno due o tre widget di calcolo sul tuo modulo – uno per il calcolo della Differenza Epoch Time e uno per il Resto (per l’anno/mese/giorno o per l’ora/minuto o per entrambe le cose). Poi in base alle tue specifiche esigenze potresti aver bisogno di aggiungerne altri per fare calcoli più complessi.
Esempio:
Se hai bisogno di ottenere soltanto la differenza in ore e minuti, ti basteranno 4 widget di calcolo per:
– Differenza Epoch Time
– Resto per ora/minuto
– Ore
– Minuti
Se invece vuoi ottenere la differenza in mesi, giorni, ore, minuti, avrai bisogno di 7 widget di calcolo per:
– Differenza Epoch Time
– Resto per il mese/giorno
– Resto per l’ora/minuto
– Mesi
– Giorni
– Ore
– Minuti
Il modulo demo che abbiamo fornito sopra, utilizza 13 widget di calcolo:
– 3 widget necessari per il calcolo della differenza Epoch Time, e due per i resti
– 5 widget per ottenere la differenza in anni > mesi > giorni > ore > minuti
– 5 widget per scomporre i valori in anni, mesi, giorni, ore, e minuti
2. Configura i Campi Selettore Data
Apri la finestra delle proprietà del campo Selettore Data e vai sul tab ORA. Abilita il Campo per l’Ora spostando l’interruttore su ON. Imposta quindi il FORMATO ORA su 24 ORE.
3. Imposta i Widget di Calcolo su SOLA-LETTURA
Questo è opzionale, ma si preferisce questa modalità per evitare che gli utenti modifichino inavvertitamente il valore degli widget di calcolo mentre compilano il modulo.
4. Ora viene la parte divertente. Aggiungi la formula
Andremo a coprire i calcoli necessari per tutte le unità di tempo, perciò potrai semplicemente copiare quelle che ti servono per il tuo modulo.
Prendendo in esame:
Data 1 = 1 Gennaio 2017 ore 01:05
Data 2 = 30 Giugno 2036 ore 20:50
Epoch = 615239100
Formula Differenza Epoch Time:
(Data2–Data1)*86400Moltiplica la differenza per 86400 per ottenere la Epoch Time in secondi.
Formula per il Resto (per Anni > Mesi > Giorni):
(Differenza Epoch/ 31556926–(floor(Differenza Epoch/31556926)))*31556926
Anche se può sembrare complicato, stiamo semplicemente ricavando il resto. Il valore Epoch Time è stato diviso per 31556926 che rappresenta il numero di secondi in un anno. Dopo di che sottraiamo il quoziente arrotondato per difetto, dal quoziente originale, per ottenere il valore decimale. Infine lo moltiplichiamo nuovamente per 31556926 per ottenere il resto.
Formula per il Resto (per Ore > Minuti):
(Differenza Epoch/ 86400–(floor(Differenza Epoch/86400)))*86400
Stesso principio, ma questa volta dividiamo per 86400 per ottenere ore/minuti rimanenti in un giorno.
Formula per gli Anni:
floor(Differenza Epoch /31556926)
Questa è piuttosto intuitiva. Semplicemente divide il valore Epoch Time per 31556926, poi arrotonda per difetto il risultato.
Formula per i Mesi:
floor(Resto per A/M/G/2629743)
Ora, utilizziamo il Resto per A/M/G e lo dividiamo per 2629743 così da ottenere il numero di mesi rimanenti.
Formula per i Giorni:
floor(((Resto per A/M/G/2629743)–Mesi)*30,44
Questo va moltiplicato per 30,44 per ottenere il numero di giorni rimanenti.
Formula per le Ore:
floor(Resto per HH:MM/3600)
Dividiamo il Resto per HH:MM per 3600, ovvero il numero di secondi presenti in un’ora. Poi arrotondiamo il risultato per difetto.
Formula per i Minuti:
round(((Resto per HH:MM/3600)–Ore)*60)
Questa volta anziché utilizzare la funzione floor(), utilizziamo round(). Le unità di tempo più elevate richiedono l’utilizzo di floor() per permetterci di ottenere i resti per il calcolo delle unità di tempo più piccole. E dato che i minuti rappresentano l’unità di tempo più piccola calcolabile, è sufficiente applicare il classico arrotondamento della funzione round().
Le prossime 5 formule sono facoltative, ma le citiamo nel caso ti dovessero servire. Ecco le formule base per scomporre il valore Epoch Time in tutte le unità di tempo:
Anni:
floor(Differenza Epoch /31556926)
Mesi:
floor(Differenza Epoch/2629743)
Giorni:
floor(Differenza Epoch /86400)
Ore:
floor(Differenza Epoch /3600)
Minuti:
floor(Differenza Epoch /60)
D’accordo può sembrare un po’ complicato, ma una volta capito il meccanismo, specialmente la parte su come ottenere il resto e quale unità di conversione va utilizzata, tutto sarà molto più chiaro.
Clona il modulo demo per capire a fondo come funzionano i calcoli che abbiamo visto in questo articolo.
Guida Correlata: Come Clonare un Modulo Esistente da un URL
Puoi lasciare commenti e suggerimenti qui sotto. Se hai bisogno di chiarimenti, pubblica la tua domanda sul Forum di Assistenza, saremo lieti di assisterti.
Invia un Commento: