日期时间不包括在django的周末

时间:2015-01-23 09:30:36

标签: python django datetime

关于我的约会时间我有一个问题,我需要一个不包括周末过去15天的日期,我正在解决这个问题,但我得到了所有的日期,包括周末。 这是我的代码: -

days_to_show = 15
    start_date = datetime.date.today() - datetime.timedelta(days=days_to_show)
    #print start_date
    query = Book.objects.values('startdate').order_by('timeid') \
           .annotate(spent=Sum('spent')) \
           .filter(project_id=project_id,
                   startdate__range=(start_date, datetime.datetime.now()))

    spent_dict = dict((d['startdate'], d['spent']) for d in query)
    date_list = [str((start_date) + (datetime.timedelta(days=day)))
                             for day in range(0, days_to_show)]


    sp_data['time'] = [{'startdate': date, "spent":spent_dict.get(str(date),0)}
                             for date in date_list ]

2 个答案:

答案 0 :(得分:2)

分两个阶段创建date_list

# get all dates for the period
date_list = [(start_date) + datetime.timedelta(days=day)
                         for day in range(0, days_to_show)]
# filter out week ends
date_list = [str(date) for date in date_list if date.weekday() not in (5,6)]

答案 1 :(得分:0)

Python端(较慢,因为数据被拉到应用程序,然后过滤)

如果op的评论提到,日期在数据库中存储为VARCHAR而不是DATEDATETIME(糟糕的主意),您可以使用Python将它们转换为datedatetime python时间,然后在python .weekday()datetime对象上使用date来过滤星期六(5)和星期日(6),例如

without_weekends = [book for book in books if book.date.weekday() not in [5, 6]]

https://docs.python.org/2/library/datetime.html

数据库方面(更好的是,数据存储为DATE / DATETIME,过滤发生在DB端,因此只有相关数据被发送回应用程序)

Django有一个week_day查询,适用于日期/日期时间类型:https://docs.djangoproject.com/en/dev/ref/models/querysets/#week-day

  

但我得到了包括周末在内的所有日期

您可以从所需的范围中排除周末,例如执行Book.objects.filter(...).exclude(date__week_day__in=[1, 7])从查询集中删除星期日(1)和星期六(7)