如何修改Python的daterange函数使其包含指定结束日期?
解决日期范围输出不包含结束日期的问题
我看了你的代码,问题核心出在daterange函数的循环范围设置上:
当前你的daterange函数里,循环次数是基于两个日期的天数差来生成的:
range(int ((d1 - d).days))
比如你输入的2018-05-07到2018-05-11,两者相差4天,range(4)会生成0、1、2、3这四个数值,对应的日期就是起始日加0到3天,自然就停在了结束日期的前一天。
要让结束日期也被包含进来,只需要把循环的长度加1,让循环多执行一次即可。
修改后的daterange函数
def daterange(d, d1): # 在天数差基础上加1,确保包含结束日期 for n in range(int ((d1 - d).days) + 1): yield d + timedelta(n)
现在重新运行代码,输入起始日期2018-05-07、结束日期2018-05-11,输出就会变成:
2018-05-07 2018-05-08 2018-05-09 2018-05-10 2018-05-11
额外小建议
你的代码里直接从数据库查询结果中取date字段,如果数据库中没有对应日期的记录,程序会抛出KeyError。可以加个简单的判断让程序更健壮:
item = collection.find_one({"date" : d}) if not item: print(f"日期 {d} 在数据库中不存在") exit() datas = item['date'] item1 = collection.find_one({"date" : d1}) if not item1: print(f"日期 {d1} 在数据库中不存在") exit() datas1 = item1['date']
内容的提问来源于stack exchange,提问作者Filipe Varandas
相关产品推荐
相关产品推荐

