如何计算特定日期的月份?

时间:2015-02-19 19:35:37

标签: python django python-datetime python-dateutil

在我的django应用程序中,我有一些约会。 我需要计算到这个日期剩余的几个月,使用完整(四舍五入)的月份。 例如:今天是2015年2月19日(2月),我的搜索"日期是2015年8月4日。差异应该是6。 我怎样才能获得适当的价值?

3 个答案:

答案 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)

要计算月差(四舍五入),我会朝这个方向前进:

  • 获取不同日期的日期对象(请参阅datetime包)。这很容易,因为构造函数需要年,月,日
  • 计算日期“date2 - date1”之间的差异,这会自动给出timedelta对象
  • 通过在timedelta对象上调用“total_seconds()”来获取两个日期之间的差值
  • 将秒数除以24 * 60 * 60将给出天数
  • 将天数除以30或(如您所愿)31将给出月数。您可以根据需要对值进行舍入。

这应该足够了:

    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)

好处:不需要额外的包,所有包都在标准包中。