Генератор Повторяющихся Дат
Создаёт повторяющиеся даты событий: ежедневно, еженедельно, ежемесячно или с пользовательскими интервалами.
Об этом инструменте
Генератор повторяющихся дат помогает вычислять и отображать даты повторяющихся событий без ручных расчётов. Планируете ли вы еженедельные встречи команды, ежемесячные платежи счетов или ежедневные напоминания, этот инструмент мгновенно генерирует все необходимые даты на основе вашей начальной даты и модели повторения.
Для использования инструмента выберите начальную дату, выберите тип повторения (ежедневно, еженедельно, ежемесячно или ежегодно) и установите количество повторений, которые вы хотите сгенерировать. Инструмент сразу же покажет полный список всех будущих дат событий, которые вы можете копировать, экспортировать или использовать по мере необходимости. Вы также можете указать пользовательские интервалы, например каждые 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.