You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python计算两个日期差值时datetime.days返回结果与预期不符如何解决?

问题根因

Python datetime 模块计算两个日期对象的差值时,返回的timedelta.days是两个日期间的间隔天数,不是包含首尾日期的总天数。比如2021-10-20到2021-10-21,时间差实际是24小时,对应间隔天数就是1,和你预期的「包含首尾的统计逻辑」不一致。

解决方案

直接在计算结果后加1即可:

duration = delta.days + 1

额外优化建议

你的代码里存在不必要的格式转换冗余步骤:你先把前端拿到的%Y-%m-%d格式的日期转成datetime对象,又转成%d-%m-%Y的字符串,再重新转成datetime对象计算差值,完全可以跳过中间字符串转换的步骤,直接用第一次解析得到的datetime对象计算差值,减少多余的性能损耗和格式转换出错的风险。

优化后参考代码:

elif request.method == 'POST':
    name = request.form['name']       # 从HTML表单获取姓名
    rawstartdate = request.form['date1']   # 从HTML表单获取起始日期
    rawenddate = request.form['date2']    # 从HTML表单获取结束日期
    # 直接解析原始日期格式做差值计算,不需要中转UK格式字符串
    start_datetime = datetime.strptime(rawstartdate, '%Y-%m-%d')
    end_datetime = datetime.strptime(rawenddate, '%Y-%m-%d')
    delta = end_datetime - start_datetime
    # 按包含首尾的逻辑计算天数
    duration = delta.days + 1
    print(duration) # 调试用
    # 转换为UK格式存入数据库
    startdate_uk = start_datetime.strftime('%d-%m-%Y')
    enddate_uk = end_datetime.strftime('%d-%m-%Y')
    record = database(user=name,startdate=startdate_uk,enddate=enddate_uk,duration=duration)

内容的提问来源于stack exchange,提问作者benfamily2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:36:04