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无法拒绝的求职信
浅析上传头像示例及其注意事项

