python 计算两个日期相差多少个月实例代码

发布时间 - 2026-01-11 01:15:40    点击率:

近期,由于业务需要计算两个日期之前相差多少个月。我在网上找了很久,结果发现万能的python,居然没有一个模块计算两个日期的月数,像Java、C#之类的高级语言,都会有(date1-date2).months的现成方法,觉得不可思议。说句实在的,一直觉得python 的日期处理模块真心不好用。

哦,对了,别跟我说 datetime, calendar, dateutil 这些模块,因为我都试过了,都没用。有个竟然算出来还有错。datetime.timedelta只能计算出日时分秒。对年月却不支持。网上一搜,一大堆的。

dateutil.rrule这个例子是我好不容易找到的,请看我的测试结果:

import datetime

from dateutil import rrule

d1 = datetime.date(2016, 2, 29)
d2 = datetime.date(2019, 3, 31)

months = rrule.rrule(rrule.MONTHLY, dtstart=d1, until=d2).count()

print(f"months={months}")

看到这样的结果,我只能呵呵了。

废话不多少,献上自己写的代码:

该代码返回,(月,小数月)

import datetime

import calendar as c



d1 = datetime.date(2016, 2, 29)

d2 = datetime.date(2019, 3, 31)



def calmonths(startdate, enddate):

# 计算两个日期相隔月差

samemonthdate = None

try:

samemonthdate = datetime.date(enddate.year, enddate.month,

startdate.day)

except Exception as e:

print(e)

samemonthdate = datetime.date(enddate.year, enddate.month,

c.monthrange(enddate.year,

enddate.month)[1])


holdmonths = 0

decimalmonth = 0.0

if samemonthdate > enddate:

premanthdate = None

try:

premanthdate = datetime.date(enddate.year, enddate.month - 1,

startdate.day)

except Exception as e:

print(e)

premanthdate = datetime.date(enddate.year, enddate.month - 1,

c.monthrange(

enddate.year,

enddate.month - 1)[1])

currmonthdays = (samemonthdate - premanthdate).days

holdmonths = (premanthdate.year - startdate.year

) * 12 + premanthdate.month - startdate.month

decimalmonth = (enddate - premanthdate).days / currmonthdays


elif samemonthdate < enddate:

nextmonthdate = None

try:

nextmonthdate = datetime.date(enddate.year, enddate.month + 1,

startdate.day)

except Exception as e:

nextmonthdate = datetime.date(enddate.year, enddate.month + 1,

c.monthrange(

enddate.year,

enddate.month + 1)[1])

currmonthdays = (nextmonthdate - samemonthdate).days

holdmonths = (samemonthdate.year - startdate.year

) * 12 + samemonthdate.month - startdate.month

decimalmonth = (enddate - samemonthdate).days / currmonthdays


else:

holdmonths = (enddate.year - startdate.year

) * 12 + enddate.month - startdate.month


return holdmonths, decimalmonth


months = calmonths(d1, d2)


print(f"months={months}")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# python  # 日期相差天数  # 相差月份  # 日期差多少月  # Python高效计算上周五到任意日期的完全指南  # Python实现计算两个指定日期相差几年几月几日  # Python计算当前日期是一年中的第几天的方法详解  # Python计算指定日期是今年的第几天(三种方法)  # Python计算两个日期相差天数的方法示例  # python获取指定日期范围内的每一天  # 每个月  # 每季度的方法  # Python获取时间范围内日期列表和周列表的函数  # Python计算指定范围日期的完全指南  # 会有  # 我在  # 有个  # 我都  # 网上  # 很久  # 不容易  # 找了  # 我好  # 我只能  # 好用  # 个月  # 有错  # 说句  # 大家多多  # 计算出  # 一搜  # 试过了  # 不可思议  # 别跟我 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  android nfc常用标签读取总结  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  怎样使用JSON进行数据交换_它有什么限制  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  如何在云指建站中生成FTP站点?  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  微信小程序 配置文件详细介绍  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  高端智能建站公司优选:品牌定制与SEO优化一站式服务  Laravel怎么为数据库表字段添加索引以优化查询  微信推文制作网站有哪些,怎么做微信推文,急?  Python进程池调度策略_任务分发说明【指导】  Swift开发中switch语句值绑定模式  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  简单实现Android验证码  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  Android滚轮选择时间控件使用详解  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  Laravel如何处理表单验证?(Requests代码示例)  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  网站制作价目表怎么做,珍爱网婚介费用多少?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  Laravel如何使用Eloquent进行子查询  千库网官网入口推荐 千库网设计创意平台入口  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  如何实现javascript表单验证_正则表达式有哪些实用技巧  Java类加载基本过程详细介绍  网站建设要注意的标准 促进网站用户好感度!  再谈Python中的字符串与字符编码(推荐)  如何在橙子建站上传落地页?操作指南详解  WEB开发之注册页面验证码倒计时代码的实现  Laravel如何创建自定义Artisan命令?(代码示例)  Laravel如何使用模型观察者?(Observer代码示例)  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  浅谈javascript alert和confirm的美化  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  jQuery 常见小例汇总  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  如何破解联通资金短缺导致的基站建设难题?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  浅析上传头像示例及其注意事项