views:

964

answers:

11

This is a wheel that's been re-invented again and again over the years.

The Problem: The user needs to input a Date/Time

Basic considerations

  • We want to make it as easy as possible for the user to enter the desired date/time
  • Some applications call for historical dates, some applications call for future dates only, some will need to handle both
  • We want to prevent the user from entering jibberish data
  • We want to auto-populate this control as aggressively as possible.
  • We want this control to be as re-usable as possible.

Popular solutions include:

  • Text Boxes
  • Combo Boxes
  • Pop-out calendars
  • Server-side and/or client-side validation
  • Various ways of alerting the users about bad data

There are a panoply of ready-to-eat solutions about, but I'm looking for some more general information. Have there been any usability studies done on the various date-time-control approaches? Is there a "best" date-time control out there? Are there any well-established "Dos and Don'ts"?


Related question: Best GUI control(s) to describe a time range

+2  A: 

A text box with an image-link to a pop-out calendar on the side is my choice. Best of both worlds.

If you want something extra you could let a natural language date/time parser like Chronic http://chronic.rubyforge.org/ spice it up.

Also don't forget the international users.

Jonas Elfström
+14  A: 

My preference is for a text input with an elipsis button next to it:

Enter a date [        ] [...]

The elipsis would pop up a calendar to populate the text input, but the user can type in a date if they want. Validation should be done when the "OK" button for the form is pressed - trying to do date validation on a character by character basis is doomed, in my experience.

The validation should be sophisticated and allow expressions like

"today"
"Tomorrow"
"23 Jan"

etc.

Edit: In reply to some comments, one could do validation when the text edit loses focus (though I hate that kind of thing) in which case the edit content could change from "23 Jan" to "23-01-2009" to indicate that the exprssion was understood.

anon
Date validation might work if there's no popup, but a change in colour / bold text / something like this. Still, this is a good tip, +1.
mghie
Yes about allowing expressions like the samples provided. If I just type "5" I mean the 5th of this month, this year, and this time if you need time, other wise no time or midnight. Another shortcut users like is 022309 for Feb 23, 2009. Some of them can bang that out quick on the num pad.
Bratch
@Bratch: You have to be careful with expressions like 022309. If it's, say, 021009, is that February 10 or October 2? Or even October 9, 2002?
Michael Myers
+1 for mmyers. It's an internationalization issue. A good portion of the world is used to DDMM, but the US most often uses MMDD.
Scottie T
It depends if you are internationalized or not, but if it was US only, and maybe internal LAN, then MMDDYY is expected. Definately need to be careful with that one. Of course for us YYYYMMDD would best.
Bratch
I like this date input style, but I would use a tiny calendar icon on the button. How many users actually know what the ellipsis means in this context? Also, if a certain date format is assumed, then there should probably be an example of the format (MMDDYY) shown somewhere.
Kurt W. Leucht
+2  A: 

I'd suggest you also allow for users who like to type rather than click on a calendar control, so a combination of text box + popup calendar works well.

We created a custom control with just such a combination. User can type a date in a variety of formats in the textbox, or click on a button to pop up the calendar.

We allow all sorts of input like "today", "wed", or "+2" (for day after tomorrow) and use regular expressions for most of the validation client side. We also do server side validation of course.

The control also has an optional textbox for time which can be enabled or hidden by a property. We felt it was easier to separate date from time. For times, we allow "9pm", "2100", "09:00" etc.

The control caters for a min and max date, so that date of birth can have a range from say -100 years to current year, while credit card expiry might range from current year to +5 years, and so we use range validators.

MikeW
A: 

I'd go for three alternatives depending on the situation:

  1. 2 combo boxes. One listing year + month, another the day
  2. 3 combo boxes. One listing years, one month, one days
  3. Visible calendar/s and combos like this one from YUI

And I believe there are more options from which I'd choose.

Ionuț G. Stan
A: 

You need to check your UI requirements. If you want script-enabled support only, they you can go with any of your panopoly of scripts and run with whatever date/time format they provide into a hidden field.

However, if you need the user entry in a textbox, then you're faced with some decisions:

  • Is the date/time format rigid? e.g. mm/dd/yyy hh:mm:ss format only?
  • Or loosely defined, to allow for the "today", "tomorrow", "23 Jan" style entries?
  • Will the formats be locale-specific? e.g. mm/dd/yyyy vs. dd/mm/yyyy

Validation methods depend on your decisions on requirements.

I like the jQuery date-picker plugin. It'll allow output in specific formats.

spoulson
A: 

A calendar showing multiple months continuously: http://www.cs.helsinki.fi/u/salaakso/patterns/Calendar-Strip.html

Esko Luontola
A: 

I've always found Google Calendar easy to use in this respect. You could certainly do worse than trying to emulate it. The key is to give the user a lot of flexibility in how they enter information. For example, I can select a time from a drop down list or type it in manually, and when I type, I'm not required to include the colon or the "m" in "pm".

+4  A: 

Give me a calendar to select the date with a mouse. And let me type the date in with the keyboard. Accept as many formats as possible. If I need to enter December 21, 2012, let me use:

  • Dec 21 2012
  • 21DEC2012
  • December 21 2012
  • 12/21/2012 (or 21/12/2012, pick one, perhaps depending on what country I'm using the software in)
  • 12212012 (same parenthetical fragment as above)
  • Etc.

Whatever you decide to do to solve the localization issue, make sure it's obvious what you expect. Give me an example, or a template with MMDDYYYY that I can type over.

Please don't give me pull-down boxes where I have to scroll, especially through years. If I'm old, and I'm entering my DOB, I don't have enough time left in my life to scroll down to the bottom of your pull-down box. Pull-down boxes are a good pattern to use when I don't know what the options are, but if it's something I'm very familiar with, like my birth date, then pull-down menus are a hassle.

Now, WRT time inputs (Big pet peeve), don't assume that I meant 3 am. If I enter 3 for the time, assume I meant 3 pm. Make me do extra work to schedule something at 3 am. If you're uncomfortable with assuming that much on my behalf, at least alert me that I've scheduled something for 3 am so I can fix it now instead of later when someone on my event invitation list emails and says "You moron, you scheduled our D&D Meetup for 3 am!"

Scottie T
Hallelujah! I hate year dropdowns. Glad I'm not the only one.
Michael Itzoe
A: 

If you're going for the combo-box/list-box option make sure you make the months read "Jan","Feb"..."Dec" rather than "1","2"..."12".
It's rather annoying having to figure out which slot is the month and which is the day according to the ranges of the values.

shoosh
A: 

I really like the way QT4's Date/Time widget works.

  • You can enter dates manually (type in the date, in common formats).
  • You can use your scroll wheel to quickly change date/time fields.
  • You have an expandable calendar that has drop down months and forward/backward arrows for the months. You can click on specific days and enter the year manually, or with a combo box (scroll wheel works here too).

Here is a short video (~7.5MB) that shows how the widget works and what some of its features are: Video Here

I would expect any sophisticated application to have some or all of these features.

Being able to enter relative dates (today, last week, 3 days ago) is handy, but I'm not sure how practical it would be, given standard questions like "What is your date of birth?", or "When would you like X emailed to you?".

Nick Presta
+3  A: 
Evan
What if you want to schedule an event that goes from 11PM on Tuesday till 1AM on Wednesday (say a daily build, for instance)? How do you wrap the time over midnight?
Ryan
I've edited my answer above to answer your questions.
Evan