根据指定日期获取上一月和上上一月的所有日期

import math
import calendar
import datetime
from datetime import date
from dateutil.rrule import rrule, DAILY


def get_month_day(data):
    year = int(data[:4])  # 2018
    month = int(data[4:6])  # 08

    day_begin = datetime.datetime(year=year, month=month, day=1)  # 构造本月1号

    date_last_month = day_begin - datetime.timedelta(days=1)
    month_s = (date_last_month.strftime("%Y%m"))[4:]

    month_range = calendar.monthrange(int(year), int(month_s))  # 本月的天数

    month_range_list = []
    if month == 1:
        time_start = date(year - 1, int(month_s), 1)
        time_end = date(year - 1, int(month_s), month_range[1])
        for dt in rrule(DAILY, dtstart=time_start, until=time_end):
            month_range_list.append(dt.strftime("%Y%m%d"))
    else:
        time_start = date(year, int(month_s), 1)
        time_end = date(year, int(month_s), month_range[1])
        for dt in rrule(DAILY, dtstart=time_start, until=time_end):
            month_range_list.append(dt.strftime("%Y%m%d"))

    last_day_begin = datetime.datetime(year=year, month=int(month_s), day=1)  # 构造上月1号
    last_date_last_month = last_day_begin - datetime.timedelta(days=1)
    last_month_s = (last_date_last_month.strftime("%Y%m"))[4:]

    last_month_range = calendar.monthrange(int(year), int(last_month_s))  # 上月的天数

    last_month_range_list = []

    if month == 1 or 2:
        last_time_start = date(year - 1, int(last_month_s), 1)
        last_time_end = date(year - 1, int(last_month_s), last_month_range[1])
        for dt in rrule(DAILY, dtstart=last_time_start, until=last_time_end):
            last_month_range_list.append(dt.strftime("%Y%m%d"))

    else:
        last_time_start = date(year, int(last_month_s), 1)
        last_time_end = date(year, int(last_month_s), last_month_range[1])
        for dt in rrule(DAILY, dtstart=last_time_start, until=last_time_end):
            last_month_range_list.append(dt.strftime("%Y%m%d"))

    print(month_range_list, last_month_range_list)

    return month_range_list, last_month_range_list


get_month_day("20181109")

结果:

['20181001', '20181002', '20181003', '20181004', '20181005', '20181006', '20181007', 
'20181008', '20181009', '20181010', '20181011', '20181012', '20181013', '20181014', 
'20181015', '20181016', '20181017', '20181018', '20181019', '20181020', '20181021', 
'20181022', '20181023', '20181024', '20181025', '20181026', '20181027', '20181028', 
'20181029', '20181030', '20181031'] 
['20170901', '20170902', '20170903', '20170904', '20170905', '20170906', '20170907', 
'20170908', '20170909', '20170910', '20170911', '20170912', '20170913', '20170914', 
'20170915', '20170916', '20170917', '20170918', '20170919', '20170920', '20170921', 
'20170922', '20170923', '20170924', '20170925', '20170926', '20170927', '20170928', 
'20170929', '20170930']

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值