前言
工作中,遇到查数据库统计,需要得到每个月的月初月末日期,指定日期间隔内的每天日期列表,或者是某个日期前N天的日期列表。
python代码
import datetime
import calendar
# 指定日期间隔内每个月的月初和月尾的日期
def get_time_range_list(startdate, enddate):
"""
获取指定时间期间内每个月月初和月末日期参数列表
:param startdate: 起始日期 --> str
:param enddate: 结束日期 --> str
:return: date_range_list -->list形如 [('2020-02-01', '2020-02-29'), ... , ('2021-01-01', '2021-01-31')]
"""
date_range_list = []
startdate = datetime.datetime.strptime(startdate, '%Y-%m-%d')
enddate = datetime.datetime.strptime(enddate, '%Y-%m-%d')
while 1:
next_month = startdate + datetime.timedelta(days=calendar.monthrange(startdate.year, startdate.month)[1])
month_end = next_month - datetime.timedelta(days=1)
if month_end < enddate:
date_range_list.append((datetime.datetime.strftime(startdate, '%Y-%m-%d'),
datetime.datetime.strftime(month_end, '%Y-%m-%d')))
startdate = next_month
else:
return date_range_list
# 获取指定日期间隔内的日期列表
def create_assist_date(datestart=None, dateend=None):
"""
获取指定日期间隔内的日期列表
:param datestart: 开始日期 ---> str
:param dateend: 结束日期 ---> str
:return: 日期列表 ['2020-01-25', '2020-01-26', '2020-01-27', '2020-01-28',...]
"""
if datestart is None:
datestart = '2019-12-28'
if dateend is None:
dateend = datetime.datetime.now().strftime('%Y-%m-%d')
# 转为日期格式
datestart = datetime.datetime.strptime(datestart, '%Y-%m-%d')
dateend = datetime.datetime.strptime(dateend, '%Y-%m-%d')
date_list = []
date_list.append(datestart.strftime('%Y-%m-%d'))
while datestart < dateend:
# 日期叠加一天
datestart += datetime.timedelta(days=+1)
# 日期转字符串存入列表
date_list.append(datestart.strftime('%Y-%m-%d'))
return date_list
# 获取今天前N天的日期列表(不包含今天)
def get_nday_list(enddate=None, n=7):
"""
获取今天前N天的日期列表(不包含今天)
:param enddate: 截止日期 ---> str
:param n: 前N天的N值
:return: ['2020-02-01', '2020-02-02', '2020-02-03', '2020-02-04']
"""
before_n_days_list = []
if enddate is None:
enddate = datetime.date.today()
else:
enddate = datetime.datetime.strptime(enddate, '%Y-%m-%d')
enddate = datetime.date(year=enddate.year, month=enddate.month, day=enddate.day)
for i in range(1, n + 1)[::-1]:
before_n_days_list.append(str(enddate - datetime.timedelta(days=i)))
return before_n_days_list