重复日期生成器
生成每日、每周、每月或自定义间隔的重复事件日期。
关于此工具
循环日期生成器可帮助您计算并显示重复事件的日期,无需手动计算。无论您是计划每周的团队会议、每月的账单支付还是每日提醒,该工具都会根据您的开始日期和重复模式立即生成所有需要的日期。
使用该工具,请选择开始日期,选择重复类型(每日、每周、每月或每年),并设置要生成的发生次数。该工具会立即显示所有未来事件日期的完整列表,您可以复制、导出或按需参考。您也可以指定自定义间隔,例如每3周或每6个月。
这个工具对项目经理、活动策划者和任何需要安排重复任务的人都很有用。它消除了手动日期计算的错误,并在协调跨多个日期的会议、订阅或维护计划时节省时间。
常见问题
代码实现
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.