| 1234567891011121314151617181920212223242526272829303132333435363738 |
- from datetime import datetime
- from dateutil.relativedelta import relativedelta as reldelta
- from django.utils.timezone import timedelta as delta
- CALENDAR_FREQUENCIES = {
- "daily": delta(days=1),
- "weekly": reldelta(weeks=1),
- "monthly": reldelta(months=1),
- "yearly": reldelta(years=1)
- }
- # Espera date en UTC
- def get_next_calendar_date(date: datetime, frequency: str):
- base_date: datetime = date.replace(hour=2, minute=59, second=59, microsecond=0) + delta(days=1)
- if frequency == "daily":
- return base_date
- if frequency == "weekly":
- days_ahead = -date.weekday() + 6 # Lunes
- return base_date + delta(days=days_ahead)
- if frequency == "monthly":
- return (base_date.replace(day=1) + reldelta(months=1))
- if frequency == "yearly":
- return (base_date.replace(day=1, month=1) + reldelta(years=1))
- return None
- # Espera date en UTC
- def get_previous_calendar_date(date: datetime, frequency: str):
- base_date: datetime = date.replace(hour=2, minute=59, second=59, microsecond=0)
- if frequency == "daily":
- return base_date
- if frequency == "weekly":
- days_ahead = date.weekday()
- return base_date - delta(days=days_ahead)
- if frequency == "monthly":
- return base_date.replace(day=1)
- if frequency == "yearly":
- return base_date.replace(day=1, month=1)
- return None
|