Questo si basa sulla risposta di Philippe Leybaert sopra, ma gestisce un caso di bordo aggiuntivo che non vedo rappresentato in nessuna delle risposte precedenti.
Il caso limite che sto affrontando è quando il compleanno è un giorno di salto, il compleanno è in passato per l'anno in corso, e l'anno in corso non è un anno bisestile, ma l'anno prossimo è.
L'attuale risposta fornita comporterà un giorno in meno in quanto imposta "il prossimo" al 28 febbraio dell'anno corrente e quindi aggiunge un anno alla data del 28 febbraio di un anno bisestile (che non è corretto). Cambiando una linea si maneggia questo caso limite.
DateTime today = DateTime.Today;
DateTime next = birthday.AddYears(today.Year - birthday.Year);
if (next < today)
{
if (!DateTime.IsLeapYear(next.Year + 1))
next = next.AddYears(1);
else
next = new DateTime(next.Year + 1, birthday.Month, birthday.Day);
}
int numDays = (next - today).Days;
Aggiornamento: Modificato per Philippe che indicava che il mio codice aveva un difetto piuttosto considerevole.
fonte
2014-05-06 18:25:08
sicuramente un dupes? ... –
@Mitch - sembra così, ma la ricerca di testo completo non ha trovato un duplicato in pochi secondi, quindi ho pensato di scrivere la domanda in modo articolato ... –
simile a http://stackoverflow.com/ domande/9/how-do-i-calculate-someones-age-in-c –