如何计算python中前几个月的第一个日期和最后一个日期的日期范围
How to calculate the date range of first date and last date of the previous months in python
我正在尝试使用 python 查找前五个月的第一个和最后一个日期。
today = datetime.today()
first = today.replace(day=1)
lastMonth = first - timedelta(days=153)
现在如何找到 python 中前五个月中每个月的第一个和最后一个日期?
谁能帮我解决这个问题?
以下内容基于 SO 上已有的两个答案。它增加了在一个日期范围内用第一天和最后一天进行响应的能力。
Get year month for last X months
import calendar
import datetime
from dateutil.relativedelta import relativedelta
def get_last_months(start_date, months):
for i in range(months):
_, num_days = calendar.monthrange(start_date.year,start_date.month)
first_day = datetime.date(start_date.year, start_date.month, 1).strftime('%Y-%m-%d')
last_day = datetime.date(start_date.year, start_date.month, num_days).strftime('%Y-%m-%d')
yield (first_day, last_day)
start_date += relativedelta(months = -1)
months_back = 5
print([i for i in get_last_months(datetime.datetime.today(), months_back)])
输出:
[('2020-10-01', '2020-10-31'), ('2020-09-01', '2020-09-30'), ('2020-08-01', '2020-08-31'), ('2020-07-01', '2020-07-31'), ('2020-06-01', '2020-06-30')]
我正在尝试使用 python 查找前五个月的第一个和最后一个日期。
today = datetime.today()
first = today.replace(day=1)
lastMonth = first - timedelta(days=153)
现在如何找到 python 中前五个月中每个月的第一个和最后一个日期?
谁能帮我解决这个问题?
以下内容基于 SO 上已有的两个答案。它增加了在一个日期范围内用第一天和最后一天进行响应的能力。
Get year month for last X months
import calendar
import datetime
from dateutil.relativedelta import relativedelta
def get_last_months(start_date, months):
for i in range(months):
_, num_days = calendar.monthrange(start_date.year,start_date.month)
first_day = datetime.date(start_date.year, start_date.month, 1).strftime('%Y-%m-%d')
last_day = datetime.date(start_date.year, start_date.month, num_days).strftime('%Y-%m-%d')
yield (first_day, last_day)
start_date += relativedelta(months = -1)
months_back = 5
print([i for i in get_last_months(datetime.datetime.today(), months_back)])
输出:
[('2020-10-01', '2020-10-31'), ('2020-09-01', '2020-09-30'), ('2020-08-01', '2020-08-31'), ('2020-07-01', '2020-07-31'), ('2020-06-01', '2020-06-30')]