条件
1. 只累加月份,忽略天,但天不能错
2. 闰年2.29,第二年不是闰年,则应该是2.28日
3.31日这类月份,加1个月应该是9.30日,不应该是10.1日,或者9.31日,加2个月应该是10.31日,不应该是10.30日,加3个月应该是11.30,以此类推
我让AI先学习了下csdn的一篇文章
然后把条件发给它,就生成了可用python代码(记得chatgpt有python环境)你需要其他代码时,先让它生成python跑通了,再让它转其他的代码
from datetime import datetime
from dateutil.relativedelta import relativedelta
def add_months_to_date(start_date: str, months_to_add: int, end_date=None) -> str:
date_format = "%Y-%m-%d"
date_obj = datetime.strptime(start_date, date_format)
end_date = date_obj + relativedelta(months=months_to_add)
if date_obj.day == 31:
if end_date.month in {4, 6, 9, 11}:
end_date = end_date.replace(day=30)
elif end_date.month == 2:
if end_date.year % 4 == 0 and (end_date.year % 100 != 0 or end_date.year % 400 == 0):
end_date = end_date.replace(day=29)
else:
end_date = end_date.replace(day=28)
elif date_obj.day == 30 and end_date.month == 2:
if end_date.year % 4 == 0 and (end_date.year % 100 != 0 or end_date % 400 == 0):
end_date = end_date.replace(day=29)
else:
end_date = end_date.replace(day=28)
elif date_obj.day == 29 and date_obj.month == 2:
if end_date.month == 2 and end_date.day > 28:
if end_date.year % 4 == 0 and (end_date.year % 100 != 0 or end_date.year % 400 == 0):
end_date = end_date.replace(day=29)
else:
end_date = end_date.replace(day=28)
return end_date.strftime(date_format)
# Test with the leap year example
print(add_months_to_date("2024-02-29", 12))