def mouthRange(beginDate, endDate, shu_day, schedule_time):
dates = []
new_mouths = []
dt = datetime.datetime.strptime(beginDate, "%Y-%m-%d %H:%M")
date = beginDate[:]
while date <= endDate:
dates.append(date)
dt = dt + datetime.timedelta(1)
date = dt.strftime("%Y-%m-%d %H:%M")
da_mouth = []
for i in dates:
if i[:7] not in da_mouth:
da_mouth.append(i[:7])
# schedule_time = "17:20"
# shu_day = 1
# current_time = datetime.datetime.now()
# current_time = current_time.strftime("%Y-%m-%d %H:%M")
# current_time = datetime.datetime.strptime(current_time, "%Y-%m-%d %H:%M")
# big_time = datetime.datetime.strptime(beginDate, "%Y-%m-%d %H:%M")
# print(current_time)
# print(big_time)
# if current_time > dt:
# print("12jpkp")
# da_mouth = da_mouth[1:]
first_mouth = int(beginDate[8:10])
print(beginDate[8:10])
if first_mouth <= shu_day:
new_mouths.append(da_mouth[0] + "-" +str(shu_day) + " "+ schedule_time)
for i in da_mouth[1:]:
days = calendar.monthrange(int(i[:4]), int(i[5:7]))[1]
if shu_day < 29:
new_mouths.append(i+"-"+str(shu_day).zfill(2) +" "+schedule_time)
if shu_day == 29:
if days >= 29:
new_mouths.append(i+"-"+str(shu_day) +" "+schedule_time)
else:
new_mouths.append(i+"-"+"28" +" "+schedule_time)
elif shu_day == 30:
if days == 28:
new_mouths.append(i+"-"+str(days) +" "+schedule_time)
elif days== 29 :
new_mouths.append(i+"-"+"29" +" "+schedule_time)
elif days >= 30:
new_mouths.append(i+"-"+"30" +" "+schedule_time)
elif shu_day == 31:
if days == 28:
new_mouths.append(i+"-"+str(days) +" "+schedule_time)
elif days== 29 :
new_mouths.append(i+"-"+"29" +" "+schedule_time)
elif days == 30:
new_mouths.append(i+"-"+"30" +" "+schedule_time)
elif days == 31:
new_mouths.append(i+"-"+"31" +" "+schedule_time)
else:
pass
last_time = datetime.datetime.strptime(new_mouths[-1], "%Y-%m-%d %H:%M")
endDate_time = datetime.datetime.strptime(endDate, "%Y-%m-%d %H:%M")
if last_time > endDate_time:
new_mouths = new_mouths[:-1]
return new_mouths
print(mouthRange('2018-08-15 11:00', '2018-09-15 12:30', 15, "12:00"))
输出结果:
解释说明:
beginDate 为 定时任务 开始执行日期
endDate 为定时任务 结束执行日期
shu_day 为 每月几号 执行定时任务
schedule_time 为定时任务中每次执行的时间
此代码也可以找到每月的最后一天,也就是每月最后一天执行,包含特殊月份的处理