python给定起始和结束日期,得到中间的日期,以保证echarts图表中日期每天都有值

20 篇文章 1 订阅
17 篇文章 1 订阅

一、示例

import datetime

#时间从2020年3月1日开始
start = '2020-03-01'
datestart = datetime.datetime.strptime(start, '%Y-%m-%d')
#结束时间到当天
dateend = datetime.datetime.now()

#遍历从起始时间到当前时间的日期
while datestart <= dateend:
    print(datestart)
    datestart += datetime.timedelta(days=1)

执行后
在这里插入图片描述

二、我的应用场景

这个问题是在使用echarts图表的时候遇到的,echarts使用数据库中的统计数据来生成图表,数据库中的数据通过脚本进行分组统计每天的数量等。
但是有些统计的值并不是每天都有的,比如统计当天的消息中包含某某关键字的数量,可能当天的消息中并没有,echarts的图就会空出来没有统计值的部分,x轴的间隔就不准了,那么就需要将当天的统计值置为0,保证每天都有对应的值。
所以这里就遍历从起始日期开始到当天的日期,到数据库中查找是否有统计值,如果没有统计值则置为0。

如下例子,使用Django orm进行数据库操作,这样将无数据的日期统计值设为0。

 #将没数据的日期值补充为0,从2020-3-1 到当天
 start = '2020-03-01'
 datestart = datetime.datetime.strptime(start, '%Y-%m-%d')
 dateend = datetime.datetime.now()

 while datestart <= dateend:

     start_timestamp = int(time.mktime(datestart.timetuple()))
     end_timestamp = int(time.mktime((datestart + datetime.timedelta(days=1)).timetuple())) - 1
     date = datetime.date.fromtimestamp(start_timestamp)

     #遍历有关键字的类型列表,如果当天该类型没有统计数据则设为0
     for type in typelist:
         if not Messagecount.objects.filter(datetimeymd=datestart, type=type):
             Messagecount.objects.create(datetimeymd=datestart, date=date, count=0, type=type,
                                         start_timestamp=start_timestamp,
                                         end_timestamp=end_timestamp)



     datestart += datetime.timedelta(days=1)

图表例如这样,保证每天都有对应的数值
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值