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门面使用教程

