一、示例
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)
图表例如这样,保证每天都有对应的数值