Formula per il calcolo dell'età dalla data di nascita (anche implementata con AutoHotkey)

Se in un programma si ha bisogno di calcolare l'età esatta di una persona avendo la data attuale (o una data per la quale si vogliano conoscere gli esatti anni passati) e la data di nascita, si può usare la seguente formula.

Routine per il calcolo dell'età:

Età = AnnoAttuale - AnnoNascita - 1 + (MeseAttuale > MeseNascita) + [(MeseAttuale = MeseNascita) * (GiornoAttuale >= GiornoNascita)]

Spiegazione.
In verde si ha la semplice sottrazione dei due anni alla quale viene sottratta una unità che sarà riaggiunta solo se verranno soddisfatte le due condizioni successive (evidenziate in rosso ed in blu).

In rosso si ha la condizione (MeseAttuale > MeseNascita) che può assumere solo i valori 1 o 0 a seconda che sia "vera" o "falsa".
Ad esempio, se il mese attuale è maggiore del mese di nascita il valore della condizione è "vera", cioè uguale a 1, unità che verrà aggiunta al risultato della sottrazione precedente che riporterà il corretto valore di età, (in questo caso, infatti, la successiva condizione, quella in blu, sarebbe uguale a zero).
Se il mese attuale è minore al mese di nascita il valore della condizione è "falso", cioè 0, quindi non si aggiunge nessuna unità alla sottrazione precedente. Nel caso che i mesi siano uguali bisogna però calcolare la successiva condizione.

In Blu si ha una doppia condizione, la prima confronta i due mesi con un operatore di uguaglianza, il risultato sarà "vero" o "falso".
Se è vero, quindi 1, vuole dire che il mesi sono uguali, quindi sarà dirimente il successivo confronto tra i giorni (seconda condizione) per capire se si deve aggiungere una unità al risultato finale oppure no.
Se è falso, quindi 0, non sarà più necessario fare il confronto dei giorni (né se il mese è superiore né se il mese è inferiore).
Ecco perché questo valore (1 o 0) viene moltiplicato per il confronto successivo, se è 0 annullerà qualsiasi risultato del secondo confronto (0*0=nullo o 0*1=0).

In AutoHotkey la formula si implementa così:




_Età := A_YYYY - _yyyyN -1 + (A_MM > _mmN) + ((A_MM = _mmN)*(A_DD >= _ddN))

dove
_yyyyN  _mmN _ddN sono le variabili che devono essere poste uguali all'anno, mese e giorno di nascita

A_YYYY A_MM A_DD sono variabili di sistema di AutoHotkey che contengono anno mese e giorno attuali.

Notare che in altri linguaggi come ad esempio nel C si deve frequentemente usare l'operatore di uguaglianza == all'interno della formula.
Per chiarezza informo che il trattino basso "underscore" che è presente prima delle variabili è una mia abitudine per distinguere le variabili di mia implementazione al posto del classico "my", non è obbligatoria, mentre quello delle variabili di sistema successivo alla A maiuscola è obbligatorio.

Ciao, Carlo.








Nessun commento:

Posta un commento