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


相关推荐: php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  UC浏览器如何设置启动页 UC浏览器启动页设置方法  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  打造顶配客厅影院,这份100寸电视推荐名单请查收  Laravel如何处理异常和错误?(Handler示例)  如何将凡科建站内容保存为本地文件?  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Python图片处理进阶教程_Pillow滤镜与图像增强  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  济南网站建设制作公司,室内设计网站一般都有哪些功能?  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  如何登录建站主机?访问步骤全解析  SQL查询语句优化的实用方法总结  Laravel storage目录权限问题_Laravel文件写入权限设置  想要更高端的建设网站,这些原则一定要坚持!  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  油猴 教程,油猴搜脚本为什么会网页无法显示?  专业商城网站制作公司有哪些,pi商城官网是哪个?  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  Laravel如何实现数据库事务?(DB Facade示例)  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  如何在IIS中新建站点并解决端口绑定冲突?  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  北京网站制作公司哪家好一点,北京租房网站有哪些?  如何用PHP工具快速搭建高效网站?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  大连网站制作公司哪家好一点,大连买房网站哪个好?  Laravel模型事件有哪些_Laravel Model Event生命周期详解  米侠浏览器网页背景异常怎么办 米侠显示修复  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Android使用GridView实现日历的简单功能  Laravel如何实现事件和监听器?(Event & Listener实战)  Mybatis 中的insertOrUpdate操作  PHP 500报错的快速解决方法  如何快速搭建高效WAP手机网站?  如何在局域网内绑定自建网站域名?  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  黑客如何通过漏洞一步步攻陷网站服务器?  详解jQuery停止动画——stop()方法的使用  Laravel定时任务怎么设置_Laravel Crontab调度器配置  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  Laravel用户密码怎么加密_Laravel Hash门面使用教程