Problem/Motivation
When creating a datetime_range field, the “Date type” setting offers three options:
- Date and time
- Date only
- All day
The difference between Date only and All day is hard to understand.
There is currently no UI description explaining how these options behave differently.
Steps to reproduce
- Add a field
Date and Time - Select the
Choose a field type:Date range - View the current description, without an explanation of the types.
Proposed resolution
For the "Date range" field, you need to add a description that lists and explains the three possible types.
Remaining tasks
Usability review to confirm the new text.
User interface changes
In the User interface, Here is the default display:

In the User interface, Here is the date range display with the description list:

| Comment | File | Size | Author |
|---|---|---|---|
| #25 | new_all_day.png | 7.67 KB | pcharrat |
| #25 | new_date_only.png | 6.6 KB | pcharrat |
| #25 | new_date_and_time.png | 6.47 KB | pcharrat |
| #24 | change_field_type.mp4 | 374.61 KB | rkoller |
| #24 | aural_interface.mp4 | 688.12 KB | rkoller |
Issue fork drupal-3023777
Show commands
Start within a Git clone of the project using the version control instructions.
Or, if you do not have SSH keys set up on git.drupalcode.org:
Comments
Comment #12
smustgrave commentedThis came up as the daily BSI target
Since I don't use the date range field often guess I've never noticed this but indeed it's not clear. Searching the code
I would of never known that.
Wonder if a simple solution would be just to add a simple description for the 3 options?
Comment #13
smustgrave commentedSeems like a good task for a new user.
Comment #16
pcharrat commentedComment #17
smustgrave commentedThanks but part of the ticket was also updating the issue summary please. With UI changes screenshots should be included too please
If you are another contributor eager to jump in, please allow the previous poster(s) at least 48 hours to respond to feedback first, so they have the opportunity to finish what they started!
Comment #18
pcharrat commentedComment #19
smustgrave commentedThink this is an improvement for sure
Comment #20
quietone commentedThis is changing text on the UI so it should pass the Usability Core Gate. Following that, this should be tagged 'Usability', so adding tag.
While this is an improvement, I think we should get the usability folks to confirm the new text, so tagging for a review. I will comment in the #ux channel about this. There are already screenshots here, so this should be ready for them to review.
And un-assigning per Assigning ownership of a Drupal core issue.
Comment #21
joachim commentedI'm still scratching my head over why you'd actually need these two types, as #12 explains WHAT is stored but not WHY.
My best guess is that it's to do with duration calculations, which won't work as you might want them with the 'date only' option?
What happens to the end date with the 'all day' option?
It would be useful to experiment with both types and see what is stored and how it behaves.
Also, if the original designers on this could be identified, their input on this would be easier than picking at it.
Comment #22
joachim commentedAh yes, the end value is set to 1 second to midnight:
> $end_date->setTimeZone($user_timezone)->setTime(23, 59, 59);
So with 'all day' you get datetimes stored with times, with the times automatically set to 00:00 and 23:59.
This is better than storing a date only in cases where you need work with the date interval, e.g.:
- calculating how long the period is
- making DB queries to check whether something is in the interval
- avoiding overlaps between different items
Comment #23
benjifisherUsability review
We discussed this issue at #3587931: Drupal Usability Meeting 2026-05-08. That issue has a link to a recording of the meeting. I am giving issue credit here to the attendees at the usability meeting: @benjifisher, @pallavi singh3013, and @rkoller.
We agree that the proposed change is an improvement on the current text, but we think it is also important to mention timezones. We feel that this is more important than the points raised in Comments #21 and #22.
For example, if I add two datetime-range fields, one with each option, then create a node setting both of them to the range May 8 to May 9, then this is what I see in the database:
The all-day range goes from 12 AM on May 8 to 11:59:59 PM on May 9 in my timezone (America/New York, currently UTC-4 thanks to DST). That gets saved in the database as
2026-05-08T04:00:00to2026-05-10T03:59:59. If @rkoller (UTC+2) views my event, then it will appear as 6 AM on May 8 to 5:59:59 AM on May 10.We do not have a recommendation for the exact wording, but we suggest adding examples based on the current date and time. For example, it might look something like this (assuming the current time is 15:44 in UTC-4):
That ends up being a lot of text. Maybe it would be better to show only one line (without the initial label) depending on the currently selected option.
If you want more feedback from the usability team, a good way to reach out is in the #ux channel in Slack.
Comment #24
rkollerThanks for the write up @benjifisher! One brief addition about the micro copy , in the current state the micro copy is also sort of redundant. You first have the option label in the select and then the same label again in the description (which is currently necessary to distinguish the three lines) and then the first two descriptions are more or less repeating the same for a third time; for date and time that the date and time is stored and for date only that only the date without the time is getting stored.
There is one other detail to note that i forgot to test during the meeting. If you are interacting with the select with a screenreader active (voiceover in my case), there are two additional noteworthy details and one question that comes up (check aural_interface.mp4):
And finally I've noticed one odd behavior in focus management with voiceover active (which is out of the scope for this issue). As illustrated in change_field_type.mp4, the select element gets into focus, you then change the default option to one other option (but with the select still in focus), when you then change the option for a second time the focus on the select is getting lost and moved to the(*the problem in the striked section i am unable to reproduce anymore - initially ran into it in safari, then tried in firefox and edge where i was unable to reproduce, and when i revisited in safari i was unable to reproduce either - but before it was consistently changing the element in focus).Change field typebutton - without voiceover active the focus remains on the select elementComment #25
pcharrat commentedHello,
I've updated my code to reflect your feedback. You'll find the new descriptions in the images below. I've modified the functionality so that the specific description appears only for the selected type, and I've revised the wording to include examples.
However, there is still a question regarding the examples. For now, I have stuck with static examples. I wonder if it might be better to use dynamic examples, even though that would require more resources each time the form is generated.
Comment #26
pcharrat commented