【发布时间】:2018-03-07 16:58:29
【问题描述】:
除了月份之外,有没有办法用week 和year 扩展get_month_day_range() 函数?
方法可以定义为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))
【问题讨论】:
标签: python