Re: Calcoli temporali (date, età, ecc.)

#23795
robitex
Amministratore del forum
    Up
    0
    Down
    ::

    Per certi documenti mi capita di dover determinare la differenza in giorni tra due date od anche determinare la data che cade dopo un numero di giorni stabilito a partire da una data base.

    Il conteggio deve essere assolutamente preciso come se contassi i giorni su un calendario.

    Risolvo questo problema utilizzando un foglio di calcolo dove le date vengono gestite internamente come numeri a partire da un istante zero che se non ricordo male è il 1/01/1900 alle ore 0.00 per Excel e Calc (OpenOffice.org).

    Tuttavia, se si rimane nell’ambito del conteggio dei giorni, credo non sia difficile implementare il calcolo in TeX utilizzando la matematica dei contatori.
    Potrebbe essere un esercizio interessante ed una funzionalità utile per gli utenti di LaTeX.

    In luatex esistono os.clock(), os.time(), os.date()
    `
    \starttext
    \ctxlua{tex.write(os.date())}
    \stoptext
    `

    Tanto per giocare vi riporto il codice luatex per calcolare la differenza tra due date in giorni (si può fare molto di più e molto semplicemente …).
    `%
    % a luatex test: Days within two date
    %

    \def\datediff#1#2{\directlua{
    local date1 = os.time({#1})
    local date2 = os.time({#2})
    local secperdays = 24*60*60
    local daysdiff = (date2 – date1) / secperdays

    tex.print(math.floor(daysdiff))}}

    Test della funzione:
    dal 1 dicembre 1998 al 7 gennaio 1999 sono trascorsi
    \datediff{day=1,month=12,year=1998}{day=7,month=1,year=1999} giorni.

    Invece per il periodo lungo dal 22/09/1950 al 12/12/1996 sono trascorsi
    \datediff{day=22,month=09,year=1950}{day=12, month=12, year=1996} giorni.

    Vediamo come se la cava con gli anni bisestili:

    dal 1/01/2011 al 1/01/2012 passano \datediff{year=2011, month=1, day=1}{year=2012, month=1, day=1} giorni;

    dal 1/01/2012 al 1/01/2013 passano \datediff{year=2012, month=1, day=1}{year=2013, month=1, day=1} giorni.

    Sembra proprio che funzioni!!! ma…

    dal 28/02/2010 al 29/02/2010 dovrebbe passare \datediff{day=28,month=2,year=2010}{day=29,month=2,year=2010} giorno. Peccato che il 2010 non \`e bisestile.
    \end`

    Compilate il tutto con il comando: luatex test.tex, ne vedrete delle belle!

    Go to top