Utvecklingstips

Hur många dagar är det kvar till dina medarbetares födelsedagar?

Det är en fråga som ställs på många intranät! Det är ju inte så svårt att räkna ut, men det är lätt att glömma bort att skottår kan ställa till det, både på själva skottdagen och om man skulle ha en medarbetare som är född på en skottdag.

På morgonen den 29:e februari i år så krashade funktionen som tar fram en lista på de medarbetare som fyller år under veckan för en av våra kunder. Jag såg tidigt var felet inträffade, programmeraren före mig hade försökt skapa en DateTime för dagens datum (som då var den 29:e februari), fast det år som medarbetaren var född:

protected int GetDaysUntilBirthDay(DateTime birthday)

        {

           DateTime compareDate = new DateTime(birthday.Year, DateTime.Now.Month, DateTime.Now.Day);

           return (birthday - compareDate).Days;

        }

Vad är då best practice för det här? Stack overflow borde ha lösningen. En snabb googling visade att så inte var fallet. Alla kodexempel jag hittade hade detta tankefelet eller det lika felaktiga (som dock bara skulle gett fel på medarbetare födda den 29:e februari): att skapa en DateTime i år med utgångspunkt från medarbetarens födelsedag.

Min lösning på problemet blev följande:

protected int GetDaysUntilBirthDay(DateTime birthday)

        {

           DateTime compareDate = DateTime.Now.AddYears(-(DateTime.Now.Year - birthday.Year));

           return (birthday.Date - compareDate.Date).Days;

       }

Hur har du löst det?

Andra bloggar om: 
 
Johanna Gustafsson

2012-05-09 kl. 09:36

Web Analytics