在我的django应用程序中,我有一些约会。 我需要计算到这个日期剩余的几个月,使用完整(四舍五入)的月份。 例如:今天是2015年2月19日(2月),我的搜索"日期是2015年8月4日。差异应该是6。 我怎样才能获得适当的价值?
答案 0 :(得分:1)
我喜欢箭头库:http://crsmithdev.com/arrow/
例如
d1 = arrow.get("19/02/2015", "DD/MM/YYYY")
d2 = arrow.get("04/08/2015", "DD/MM/YYYY")
(d2-d1).days
您将决定如何进行计算。除以30或提取月份并减去它们。
d2.month - d1.month
要处理它超过一年:
((d2.year * 100) + d2.month) - ((d1.year * 100) + d1.month)
答案 1 :(得分:1)
from datetime import datetime,timedelta
from calendar import monthrange
today = datetime.today()
dt = "04/08/2015"
fut = datetime.strptime(dt, "%d/%m/%Y")
diff = 0
while today <= fut:
today += timedelta(days=monthrange(today.day,today.month)[1])
diff += 1
print(diff)
6
如果不导入日历,我们可以在每次看到新月时增加计数:
from datetime import datetime,timedelta
today = datetime.today()
dt = "09/08/2015"
fut = datetime.strptime(dt, "%d/%m/%Y")
diff = 0
while today <= fut:
mon = today.month
today += timedelta(days=1)
if today.month != mon:
diff += 1
print(diff)
6
如果您想将未来日期定为该月的最后一天:
from datetime import datetime, timedelta
from calendar import monthrange
today = datetime.today()
dt = "02/08/2015"
fut = datetime.strptime(dt, "%d/%m/%Y")
fut = fut + timedelta(days=monthrange(fut.day,fut.month)[1]-fut.day)
diff = 0
while today < fut:
mon = today.month
today += timedelta(days=1)
if today.month != mon:
diff += 1
print(diff)
根据需要进行舍入是故意不准确的,我们关心的是我们遇到的不同月份的数量。
答案 2 :(得分:0)
要计算月差(四舍五入),我会朝这个方向前进:
这应该足够了:
d,m,y = date1.split('/')
d1 = datetime.date(y, m, d)
d,m,y = date1.split('/')
d2 = datetime.date(y, m, d)
delta = d2 - d1
days = delta.total_seconds() // (24*60*60)
result = int(days/30.0+0.5)
好处:不需要额外的包,所有包都在标准包中。