Come tutti sanno quando vengono eseguiti calcoli su delle date i valori vengono convertiti in scala decimale. Questo serve per poter utilizzare il valore all'interno delle espressioni regolari. Matematicamente il valore 1,30 non significa 90 minuti ma 1,3. Per questo viene convertito in 1,5.
Questo per i calcoli. Potrebbe servire visualizzare il valore dei minuti in sessantesimali, ossia formattato come leggiamo normalmente l'ora. Nei software si capisce immediatamente quale è il formato: Se il valore è separato dalla virgola allora il valore è in formato decimale, altrimenti, se separato dai due punti il valore dei minuti è in sessantesimale.
Nios4 per il corretto calcolo rende disponibile i comandi per il calcolo decimale. Per poter ottenere il formato "orologio" occorrerà creare uno script che prenda il valore e lo converta. Nell'esempio qui sotto viene mostrato come calcolare e formattare la differenza tra queste due.
if datafield.name() == "data_inizio" or datafield.name() == "data_fine" then
if dataview.getvalue("data_inizio") == nil or dataview.getvalue("data_inizio") == 0 then
do return end
end
if dataview.getvalue("data_fine") == nil or dataview.getvalue("data_fine") == 0 then
do return end
end
--calcolo il tempo in minuti
minuti = utility.datediffminutes(dataview.getvalue("data_inizio"),dataview.getvalue("data_fine"))
--calcolo le ore
ore = minuti / 60
oreintere = math.modf(ore)
--converto il resto dei minuti da decimali a sessantesimali
restominuti = ore-oreintere
tminuti = math.floor((((restominuti / 100) * 60) * 100) + 0.5)
--creo il valore finale formattato come ore e minuti
dataview.setvalue("totale",string.format("%02d:%02d", oreintere, tminuti))
end
- Visto che si tratta di uno script applicato alla modifica dei valori per prima controlliamo che effettivamente siano stati modificati i campi che ci interessano. Controlliamo anche che il valore sia compilato. Probabilmente questa parte andrà modificata in base al sistema operativo visto che le date sono gestite in modo diverso in base alla tipologia della base dati.
- Fatto questo calcoliamo i minuti totali presenti tra la prima data e la seconda ed estrapoliamo le ore togliendo i decimali.
- Estrapolati i decimali li convetiamo con una proporzione in sessantesimali e arrotondiamo il valore.
- Come ultima cosa montiamo le ore intere con i minuti calcolati creando il valore di tipo testo che inseriremo nel nostro campo di arrivo.
Ricordate che il valore calcolato non è utilizzabile all'interno delle espresioni. Quindi servirà sempre mantenere il valore decimale per i calcoli e quello sessantesimale per visualizzare il risultato finale.
Commenti
Posta un commento