45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
from datetime import date, datetime, timedelta
|
|
|
|
"""
|
|
This class recive two parameters, but only return a list of range of date
|
|
for example:
|
|
|
|
Entry:
|
|
start-date 2024-03-01 00:00:00
|
|
end-date 2024-03-03 00:00:00
|
|
Result:
|
|
[datetime.datetime(2024, 3, 1, 0, 0), datetime.datetime(2024, 3, 2, 0, 0), datetime.datetime(2024, 3, 3, 0, 0)]
|
|
|
|
if don't entry start-date and end-date default date will be today-1
|
|
"""
|
|
|
|
class EntryDateError(Exception):
|
|
def __init__(self, msj, code):
|
|
super().__init__(msj)
|
|
self.code = code
|
|
|
|
class DateUtil:
|
|
def __init__(self, start_date, end_date, return_type='datetime'):
|
|
self.default_Date = datetime.combine((date.today() - timedelta(days=1)), datetime.min.time())
|
|
self.start_date = start_date if start_date else self.default_Date
|
|
self.end_date = self.end_date = end_date if end_date else (start_date if start_date else self.default_Date)
|
|
self.return_type = return_type
|
|
|
|
def date_eval(self):
|
|
if self.start_date and self.end_date:
|
|
if self.end_date < self.start_date:
|
|
raise EntryDateError(f'end-date {self.end_date} can not be less than start-date {self.start_date}', 10001)
|
|
|
|
def date_range(self):
|
|
lista_de_fechas = []
|
|
current_date = self.start_date
|
|
|
|
self.date_eval()
|
|
|
|
while current_date <= self.end_date:
|
|
lista_de_fechas.append(
|
|
current_date.date() if self.return_type == 'date' else current_date
|
|
)
|
|
current_date += timedelta(days=1)
|
|
|
|
return lista_de_fechas |