[whatwg] [WF2] The <format> Element II: The Wrath of <date>
Matthew Raymond
mattraymond at earthlink.net
Tue Jan 25 06:38:24 PST 2005
One of my concerns with the <format> element as previously defined
is that if the users sees a localized version of the date and time in
their <input type="datetime"> controls, it may not match text dates and
times elsewhere on the page or website. As a result, there are only
three possible solutions:
1) Force the date/time control to display the format of the <format>
element (applyon="entry").
2) Preconfigure the settings of the user agents to display a specific
format in all date/time controls.
3) Require WF2 user agents to display dates and times in the text in a
localized format.
I believe the third option is the most logical and provides the most
comprehensive solution. Using <date>/<time>/<datetime> bypasses the need
for any configuration of specific user agents, and it allows users more
choice and greater consistency with regards to their user interface. It
also has a number of advantages outside of simple localization, since
the user agent could use the date/time to schedule an event in a
calendar program or something similar.
So here's how it would work in the markup...
Simple example:
| <p>
| The meeting is currently being held on <date>2005-1-30</date>
| at <time>11:00:00.0</time>.
| </p>
|
| <form>
| <label>New Meeting Date:
| <input type="date" value="2005-01-30">
| <format>Format: yyyy-mm-dd</format></label>
|
| <label>New Meeting Time:
| <input type="time" value="11:00:00.0Z">
| <format>Format: hh:mm</format></label>
| </form>
Because the contents of <date> and <time> are already in ISO8601
format, no |value| attributes have to be specified. The format to submit
is ISO8601 as well, so format doesn't require a |value| attribute.
Complex example:
| <p>
| The meeting is currently being held on
| <date value="2005-01-30">January 30, 2005</date>
| at <time value="11:00:00.0Z">11:00 PM</time>.
| </p>
|
| <form>
| <label for="meetdate">New Meeting Date: </label>
| <input type="date" id="meetdate" name="meetdate" value="2005-1-30">
| <format for="meetdate" min="2005-01-25" max="2006-01-30"
| value="%m/%d/%Y">
| Format: mm/dd/yyyy
| </format>
|
| <label for="meettime">New Meeting Time: </label>
| <input type="time" id="meettime" name="meettime" value="11:00">
| <format for="meettime" value="%I:%M %p">Format: hh:mm am/pm</format>
| </form>
In the above example, all |value| attributes are specified. Note
that the fallback values for <date> and <time> are no longer in ISO8601
format. Also, the submission formats have been changed, so we have to
add |value| attributes to the <format> elements, which in the above
example contain format strings that use subsets of the formatting for
strftime:
[1]http://us2.php.net/strftime
[2]http://developer.apple.com/documentation/Cocoa/Conceptual/DataFormatting/Concepts/DateFormatters.html
We may need to make minor modifications or additions to the strftime
formatting to allow for a little more flexibility with regards to how
dates are displayed.
Note that the default submission format for <format> is ISO8601, and
that if another format is specified, that date will always be used for
submission, yet the user agent determines the presentation to the user,
which would presumable be in their native format or one of their choosing.
If you were targeting WF2-only user agents, then you could just do
something like <date value="2005-01-30"/>. However, you've just killed
any kind of fallback scenario if you do, and it's easier to just do
<date>2005-01-30</date>. If there is no |value| defined, and the user
agent can't parse the child contents, the user agent should probably
just render the child contents in the same way as a legacy user agent.
Also note that I'm changing my definition of <format> so that the
child contents are purely a fallback for legacy clients. Why? Well look
at this example:
| <label for="date1">Departing:<br></label>
| <input id="date1" name="date1" value="mm/dd/yy">
| <format for="date1" min="now" value="%m/%d/%Y">
| <input src="/eta/calendar.gif" name="cbtn1" alt="View Calendar"
| type="image">
| </format>
The above is a modified version of the markup Expedia.com uses for
date entry for Mozilla Firefox in the "flights" tab. Because <input
name="cbtn1"> is unnecessary on a WF2 user agent, the element has been
made a child of <format> so that it will not be rendered. A similar
solution, with the help of some Javascript, could probably be used to
create three <select> elements in fallback rather than an <input
type="text">. I'm working on an idea for how to make this possible
without Javascript. Feel free to post comments.
For people who want specific date formats displayed, perhaps we need
special CSS properties for this purpose. Perhaps something like this:
date, input[type=date] { format-date: "%m/%d/%Y" }
...However, I think that falls outside the scope of WHATWG. The use
case seems rather week to me as well, which is pretty much "the
webmaster wants WF2 UAs to render dates in this format".
I believe this addresses nearly all outstanding issues regarding the
<input type="date/time/datetime"> elements. At the very least it covers
all the problems I know of concerning scenarios with a <input
type="text">-based fallback. Please let me know if there are additional
concerns that have not been addressed.
More information about the whatwg
mailing list