Questo è l'approccio lubridate
vorrei prendere:
new_interval(dob, today)/years(1)
rendimenti la risposta di 32
anni.
Si noti che la funzione si lamenterà che non può esprimere il resto della frazione dell'anno. Questo perché l'anno non è un concetto fisso, vale a dire 366 anni bisestili e 365 anni non bisestili. È possibile ottenere una risposta con maggiori dettagli per quanto riguarda il numero di settimane e giorni:
interval_period = new_interval(dob, today)
full_year = interval_period %/% years(1)
remaining_weeks = interval_period %% years(1) %/% weeks(1)
remaining_days = interval_period %% years(1) %% weeks(1) %/% days(1)
sprintf('Your age is %d years, %d weeks and %d days', full_year, remaining_weeks, remaining_days)
# [1] "Your age is 32 years, 51 weeks and 1 days"
Nota che uso %/%
per la divisione e %%
come modulo per ottenere le rimanenti settimane/giorni dopo aver sottratto i pieni anni/settimane .
fonte
2015-08-31 14:20:56
La divisione per 365.25 non è sufficientemente accurata? – lenz
Divisione per 365.25. O forse usare 'year (today) -year (dob)'. Ma questo sottrae solo l'anno 1 meno l'anno 2. – phiver
Sì, ma '(today-dob)/365.25' mi dà' Differenza di tempo di 32.98015 giorni' invece degli anni – Ignacio