If you set an alarm to repeat annually starting on 2/29/16, would you expect the next instance on 2/28/17, 3/1/17, or 2/29/20?

2 Answers 2


Design for the user's likely intent

  • It's overwhelmingly likely that the user who indicates Annually wants the alarm to repeat annually. Allowing the leap-year technicality to prevent the alarm from going off annually is a violation of likely user intent.

  • The question then becomes, how to deal with the leap year? There are three possibilities:

    1. Prevent the user from selecting February 29th, since that date doesn't exist in non leap years.
    2. Snap to February 28th for subsequent years, and 29th (or 28th) for subsequent leap years.
    3. Snap to the next day (March 1st), as per #2.
  • It's more likely that users will want "annually" to mean every year, so #1 is not a great option. #3 is also not great visually since it involves snapping to another month. So #2 is the remaining reasonable option.

  • Now, you will need to inform the user since the date will be different in subsequent years. Since you're on Android, a good way to do this is to use a toast which can pop up to inform that user:

    • This annual alarm will go off on February 28th when it isn't a leap year.

My gut reaction would be the last day of the month... so 2/28/17. But there's so much guess work involved that I think you're better off to give the user a preview before having them set the alarm. So if that's not what the user want, they can edited it before saving.

So something like:

The alarm will go off on: 2/29/16, 2/28/17, 2/28/18 ... until the alarm is turned off

  • I like that idea. I'm not sure how I'm going to present that information to make it clear (this is an Android app, so screen space is potentially limited) but it's definitely something I'll look into
    – TBridges42
    Commented Jul 31, 2015 at 23:33
  • Hmmm if it's an android app, I'm going to assume it's easy for the user to edit alarm at any time. So maybe all you need is "next alarm scheduled: 2/29/16" They can see this and if it's wrong update it. Or alternatively treat leap day as a special edge case and display a small onscreen message indicating 2/29/2016 is a leap day and to confirm the dates.
    – nightning
    Commented Jul 31, 2015 at 23:39
  • +1 this is the right approach. i will add an answer to fill in some design logic, but i agree with this answer
    – tohster
    Commented Jul 31, 2015 at 23:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.