如何计算特定日期的剩余月份? [复制]
Posted
技术标签:
【中文标题】如何计算特定日期的剩余月份? [复制]【英文标题】:How to calculate months left to particular date? [duplicate] 【发布时间】:2015-02-19 19:35:37 【问题描述】:在我的 django 应用程序中,我有一些约会。 我需要使用完整(四舍五入)月份来计算距离该日期还有多少个月。 例如:今天是 19/02/2015(二月),我的“搜索”日期是 04/08/2015。差值应为 6。 如何获得合适的值?
【问题讨论】:
@Mark R.:我不同意,当你仔细阅读问题时,有重要的区别! This post 搞定了!使用dateutil.relativedelta
。
【参考方案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】:我喜欢箭头库: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)
【讨论】:
【参考方案3】:要计算月差(四舍五入),我会朝这个方向走:
获取不同日期的日期对象(参见 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)
好处:不需要额外的包,都在标准包中。
【讨论】:
以上是关于如何计算特定日期的剩余月份? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何将月份值从一个 Date 对象复制到另一个对象? [复制]
如何在 mysql 5.7 上显示从月份的第一个日期到 MYSQL 5.7 上的月底日期的日期? [复制]
如何在unix bash shell中减去或添加两个特定的日期和时间[复制]
为啥我不能从我的 DataFrame 中的“日期”列中提取月份的列? [复制]