Recurring Date Generator
Generate recurring event dates: daily, weekly, monthly, or custom intervals.
About this tool
A Recurring Date Generator helps you calculate and display dates for repeating events without manual math. Whether you're planning weekly team meetings, monthly bill payments, or daily reminders, this tool instantly generates all the dates you need based on your start date and recurrence pattern.
To use the tool, select your start date, choose a recurrence type (daily, weekly, monthly, or yearly), and set how many occurrences you want to generate. The tool will immediately show you a complete list of all future event dates, which you can copy, export, or reference as needed. You can also specify custom intervals—for example, every 3 weeks or every 6 months.
This tool is invaluable for project managers, event planners, and anyone scheduling recurring tasks. It eliminates errors from manual date calculations and saves time when coordinating meetings, subscriptions, or maintenance schedules across multiple dates.
Frequently Asked Questions
Code Implementation
from datetime import date, timedelta
from dateutil.relativedelta import relativedelta # pip install python-dateutil
def generate_recurring_dates(
start: str,
pattern: str,
count: int,
days_of_week: list[int] = None, # 0=Mon..6=Sun, for weekly multi-day
) -> list[str]:
"""
pattern: 'daily' | 'weekly' | 'biweekly' | 'monthly' | 'yearly'
"""
start_date = date.fromisoformat(start)
results = []
if pattern == "weekly" and days_of_week:
# Multi-day-of-week weekly
d = start_date - timedelta(days=start_date.weekday()) # Go to Monday of week
while len(results) < count:
for dow in sorted(days_of_week):
if len(results) >= count:
break
candidate = d + timedelta(days=dow)
if candidate >= start_date:
results.append(candidate.isoformat())
d += timedelta(weeks=1)
return results
current = start_date
for _ in range(count):
results.append(current.isoformat())
if pattern == "daily":
current += timedelta(days=1)
elif pattern == "weekly":
current += timedelta(weeks=1)
elif pattern == "biweekly":
current += timedelta(weeks=2)
elif pattern == "monthly":
current += relativedelta(months=1)
elif pattern == "yearly":
current += relativedelta(years=1)
return results
# Examples
print(generate_recurring_dates("2025-01-06", "weekly", 5))
print(generate_recurring_dates("2025-01-01", "monthly", 6))
print(generate_recurring_dates("2025-01-06", "weekly", 8, days_of_week=[0, 2])) # Mon+Wed
Comments & Feedback
Comments are powered by Giscus. Sign in with GitHub to leave a comment.