[python] Get daily, weekly or monthly by period

Una Chou
Sep 30, 2021

data_unit: daily/weekly/monthly

start_date: start date of period

end_date: finish date of period

Example

Daily
daily_list = get_period_date_by_unit(data_unit= ‘daily’, start_date= ‘2021–9–1’, end_date= ‘2021–9–5’)
#daily_list=[‘2021–9–1’,‘2021–9–2’,‘2021–9–3’,‘2021–9–4’,‘2021–9–5’]

Weekly
#Sunday(isoweekday=0) is base day
weekly_list = get_period_date_by_unit(data_unit= ‘daily’, start_date= ‘2021–9–1’, end_date= ‘2021–9–30’)
#weekly_list=[‘2021–9–5’,‘2021–9–12’,‘2021–9–19’,‘2021–9–26’]

Monthly
monthly_list = get_period_date_by_unit(data_unit= ‘daily’, start_date= ‘2021–9–1’, end_date= ‘2021–12–30’)
#monthly_list=[‘2021–9–1’,‘2021–10–1’,‘2021–11–1’,‘2021–12–1’]

Code

def get_period_date_by_unit(data_unit: str, start_date: dt.datetime,
end_date: dt.datetime) -> list:
if data_unit == 'weekly':
freq = 'W'
if start_date.isoweekday() != 0:
start_date = start_date + dt.timedelta(
days=(-start_date.isoweekday()))
elif data_unit == 'monthly':
freq = 'M'
end_date = end_date + relativedelta(months=1)
else:
freq = 'D'

date_list = list(pd.date_range(start=start_date, end=end_date, freq=freq))

if data_unit == 'monthly':
tz = dt.timezone(dt.timedelta(hours=TIME_ZONE_OFFSET))
date_list = [dt.datetime(d.year, d.month, 1, tzinfo=tz) for d in
date_list]

return date_list

--

--