Recurring Date
Pro
Recurring Date is the field type best suited for events. Add multiple dates and date ranges, and set a recurring interval for each. VX works out the individual days, so a template can list the next ones without anyone typing them.
One item might be every Saturday from 10:00 to 11:00. Another might be a Friday-to-Sunday workshop that repeats monthly. A third might be a one-off evening on 24 December with no repeat.
Entries
Each Add Date item can be:
- a Single day or Multi day span
- timed, or All day
- in a different time zone from the site, when that setting is on
- set to repeat, or Does not repeat
Several items in one field cover irregular schedules. The field can hold up to 100 items (3 by default).
Repeats
Repeats offers presets from the start date: daily, weekly on that weekday, monthly on that day or weekday, yearly, and every weekday. Custom… sets the interval, weekdays, day of the month, months, and when the rule ends: never, on a date, or after a number of occurrences.
When you move the start date, a preset follows it. A custom rule stays as you set it.
Preview occurrences lists the next dates an item produces. An item whose rule produces no dates — it ended in the past, or the start date never matches the pattern — is flagged.
Recurring Date or something else?
- One calendar day, such as a publication date — Date.
- A start and end with no repeat — Date range.
- Each occurrence needs its own extra fields — a Repeater of Date or Date & Time fields.
Field settings
| Setting | What it does |
|---|---|
| Enable times | Adds start and end times and the All day switch. When off, every date is all day. |
| Enable recurrence | Shows the Repeats control. Turn it off for one-off dates that just need times. |
| Enable timezones | Lets a date use a different time zone from the site. |
| Allow multiple entries and Maximum entries | How many dates one field can hold (up to 100; 3 by default). |
| Minimum date and Maximum date | The earliest and latest dates allowed. |
| Default duration (minutes) | Sets the end time of a new date, one hour by default. |
Showing the dates
In dynamic tags and data loops, the field offers three lists:
- Entries: what was entered, with a readable description of each repeat ("Weekly on Saturday").
- Upcoming occurrences: the next dates, worked out from every item, merged and in date order.
- Previous occurrences: the most recent past dates.
Loop Upcoming occurrences to list dates for visitors. Loop Entries when you want to show the pattern itself.
The upcoming and previous lists only appear when Enable recurrence is on.
Limits
- Common repeats only: daily, weekly, monthly and yearly. Hourly repeats and rare positions such as "the last weekday of the year" are rejected.
- A rule produces at most 1,000 dates.
- Recurring Date always takes the full width of the form.
Technical details for LLMs
- Type key:
recurring_date(Pro). Settings:enable_timepicker(true),enable_recurrence(true),enable_timezones(false),allow_multiple(true),max_entries(1–100, default 3),min_date,max_date(YYYY-MM-DD),default_duration_minutes(0–1440, default 60). - Stored: JSON list of entries
{ id, start, end, tz, allday, multiday, rrule }. Overmax_entries: trimmed with a warning.allow_multipleoff keeps the first entry. - RRULE subset:
FREQ(DAILY|WEEKLY|MONTHLY|YEARLY),INTERVAL≥ 1,BYDAY(optionally[-]N-prefixed for monthly/yearly),BYMONTHDAY(−31…31),BYMONTH(1–12),COUNT(1–1000),UNTIL,WKST. Everything else fails validation (Could not parse recurrence rule.). - REST: read
[ { start, end, tz, allday, rrule } ](noid/multiday); write the same shape. - Dynamic data: loopable lists
entries(items:start,end,tz,allday,repeats,rrule),upcomingandprevious(items:start,end,allday,tz), e.g.@post(schedule.upcoming). Occurrence expansion defaults to 10 and caps at 1,000.upcoming/previousare omitted whenenable_recurrenceis off.