除了月之外,有没有办法延长get_month_day_range()
函数week
和year
?开始和结束一段时间
该方法可以定义为get_day_range(period, date)
哪个周期可以是week
,month
或year
。
import datetime
from dateutil.relativedelta import relativedelta
def get_month_day_range(date):
"""
For a date 'date' returns the start and end date for the month of 'date'.
Month with 31 days:
>>> date = datetime.date(2011, 7, 27)
>>> get_month_day_range(date)
(datetime.date(2011, 7, 1), datetime.date(2011, 7, 31))
Month with 28 days:
>>> date = datetime.date(2011, 2, 15)
>>> get_month_day_range(date)
(datetime.date(2011, 2, 1), datetime.date(2011, 2, 28))
"""
last_day = date + relativedelta(day=1, months=+1, days=-1)
first_day = date + relativedelta(day=1)
return first_day, last_day
if __name__ == "__main__":
import doctest
doctest.testmod()
我有这样的结果至今:
def get_period_day_range(date, period='month'):
last_day = None
first_day = date + relativedelta(day=1)
if period == 'month':
last_day = date + relativedelta(day=1, months=1, days=-1)
elif period == 'week':
last_day = date + relativedelta(day=1, weeks=1, days=-1)
elif period == 'year':
last_day = date + relativedelta(day=1, years=1, days=-1)
return first_day, last_day
这不是所有的工作时间。它不适用于week
的datetime.datetime(2017, 7, 10)
以及year
的datetime.datetime(2017, 7, 5)
。我怎么修复它?有什么建议么?
请注意,函数的目的是为了给我们某个时间段的开始和结束日期,具体取决于我们输入的日期。举例来说,如果我给datetime.datetime(2017年,7,10)年,它会给我(datetime.datetime(2017, 1, 1), datetime.datetime(2017, 12, 31))
或一周datetime.datetime(2017, 7, 5)
输出为(datetime.datetime(2017, 7, 2), datetime.datetime(2017, 7, 8))