python实现:根据给定的日期间隔打印日期列表

前言

工作中,遇到查数据库统计,需要得到每个月的月初月末日期,指定日期间隔内的每天日期列表,或者是某个日期前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
发布了146 篇原创文章 · 获赞 66 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_38923792/article/details/104184174