3 回答
TA贡献2065条经验 获得超13个赞
看来,OP @Joshkunz问了发现这几个月是两个日期之间,而不是“多少个月”是两个日期之间。因此,我不确定为什么@JohnLaRooy被投票超过100次。@Joshkunz在原始问题下的评论中指出,他想要的是实际日期(或月份),而不是查找月份总数。
所以就出现了问题就想,两个日期之间2018-04-11,以2018-06-01
Apr 2018, May 2018, June 2018
而如果它是什么之间2014-04-11要2018-06-01?那么答案将是
Apr 2014, May 2014, ..., Dec 2014, Jan 2015, ..., Jan 2018, ..., June 2018
这就是为什么很多年前我拥有以下伪代码的原因。它仅建议使用两个月作为终点并遍历它们,每次增加一个月。@Joshkunz提到他想要“月”,还提到他想要“日期”,在不确切知道的情况下,编写确切的代码很困难,但是想法是使用一个简单的循环遍历端点,并且一次增加一个月。
八年前的2010年的答案:
如果增加一周,那么它将按需要进行大约4.35倍的工作。为什么不只是:
1. get start date in array of integer, set it to i: [2008, 3, 12],
and change it to [2008, 3, 1]
2. get end date in array: [2010, 10, 26]
3. add the date to your result by parsing i
increment the month in i
if month is >= 13, then set it to 1, and increment the year by 1
until either the year in i is > year in end_date,
or (year in i == year in end_date and month in i > month in end_date)
只是目前的pseduo代码,尚未经过测试,但我认为沿着同一思路的想法是可行的。
TA贡献1784条经验 获得超2个赞
首先定义一些测试用例,然后您将看到该函数非常简单并且不需要循环
from datetime import datetime
def diff_month(d1, d2):
return (d1.year - d2.year) * 12 + d1.month - d2.month
assert diff_month(datetime(2010,10,1), datetime(2010,9,1)) == 1
assert diff_month(datetime(2010,10,1), datetime(2009,10,1)) == 12
assert diff_month(datetime(2010,10,1), datetime(2009,11,1)) == 11
assert diff_month(datetime(2010,10,1), datetime(2009,8,1)) == 14
您应该在问题中添加一些测试用例,因为有很多潜在的极端情况需要解决-定义两个日期之间的月数的方法不止一种。
添加回答
举报