Date, time, and date range
| Field | Stores | Example |
|---|---|---|
| Date | A calendar day | The date a book is published |
| Time | A time of day, with no date | "Shop doors close at 21:00" |
| Date & Time | A day and a time together | A launch event's start |
| Date range | A start day and an end day | A retreat from 12 to 15 June |
Each field can set limits: Minimum date and Maximum date (or a minimum and maximum time) restrict what the picker allows. A date outside the limits is saved with a warning.
Date range
A Date range stores both ends of a period in one field. The end can't come before the start. Conditional logic and dynamic tags can use the Start and End separately.
An empty range stays empty. It doesn't fill in today's date.
Formats and time zones
Values are stored in a fixed, sortable format, whatever the site's date settings: 2026-06-12 for dates, 22:30:00 for times, and 2026-06-12 19:00:00 for date and time. When you display them, format them for your visitors, for example with the date_format modifier in a dynamic tag.
The inputs in the editor follow the language in your WordPress profile. With English (UK) you type 12/06/2026 and get a 24-hour clock, with German 12.06.2026, and with English (United States) 06/12/2026. The stored value is the same either way.
These fields store no time zone. A time means the site's local time.
If a launch event needs its own time zone, use a Recurring Date field, which can store one per entry.
Something that repeats
For "every Saturday" or "the first Monday of each month", don't add a stack of Date fields. Use Recurring Date.
Technical details for LLMs
- Type keys and settings:
date(default_value,min_date,max_date:YYYY-MM-DD);time(default_value,min_time,max_time:HH:MM:SS);datetime(default_value,min_datetime,max_datetime:YYYY-MM-DD HH:MM:SS);date_range(default_value: { start, end },min_date,max_date). - Stored: strings in exactly those formats;
date_rangeas JSON{ start, end }. A time that doesn't matchHH:MM:SSis a warning (Invalid date/time value.), not a rejection.end < starton a range is a warning (date_range_order). - Abilities:
timereads back asHH:MMbut must be written asHH:MM:SS.dateanddatetimeround-trip unchanged.date_rangereads and writes{ start, end }. - Condition profile
date(before,after,on,between);date_rangeexposesstart/endsub-sources. - All four are
compactfor form columns.