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
相关产品推荐
相关产品推荐

