跳周末功能?的Django /蟒

时间:2016-09-27 15:29:26

标签: python dayofweek weekday

我需要每天自动跳跃周六和周日所以我可以从模型中计算某些元素。这是我需要创建的表的一个示例:

Date ------- Order Holds

Today ------ 45 (wednesday)

09/09/16 --- 34 (Thursday)

10/09/16 --- 23 (Friday)

-----JUMP WEEKEND --- (and keep count in)

13/09/16 --- 56 (Monday)

14/09/16 --- 14 (Tuesday)

这就是我如何过滤来计算今天的保留数量,我可以通过增加1天来获取它们:

这是我的模型(models.py):

class Data(models.Model):
    date = models.DateField(null=True, blank=True)
    ban = models.CharField(max_length=10)

这是我的逻辑(views.py)

的一部分
today = datetime.today()
tomorrow = today + timedelta(days=1)
orders = Data.objects.filter(date=today)
ban = orders.filter(ban__contains="BAN").count()

正如您在我的views.py逻辑中所看到的,我可以从今天的日期过滤掉所有BAN状态,之后我可以用现在的问题来计算它们。我的问题是,如果我明天过滤,明天是星期五,我需要在周六和周日跳过。换句话说,只需跳过周末就可以应用这种逻辑。

2 个答案:

答案 0 :(得分:1)

您可以通过调用weekday()方法找到datetime的工作日编号。一旦你有了这个价值,你就可以测试它,看看你感兴趣的日子之一是什么:

from datetime import datetime, timedelta

DAYS_OF_INTEREST = {0, 1, 2, 3, 4}  # Monday-Friday
DELTA_ONE_DAY = timedelta(days=1)
today = datetime.today()

day = today
for _ in range(14):  # next two weeks
    if day.weekday() in DAYS_OF_INTEREST:
        print(day.strftime(("%d/%m/%y --- %A")))
        #orders = Report.objects.filter(current_fcd_date=day)
        #hold = orders.filter(order_hold__contains="HOLD").count()
    day += DELTA_ONE_DAY

输出:

27/09/16 --- Tuesday
28/09/16 --- Wednesday
29/09/16 --- Thursday
30/09/16 --- Friday
03/10/16 --- Monday
04/10/16 --- Tuesday
05/10/16 --- Wednesday
06/10/16 --- Thursday
07/10/16 --- Friday
10/10/16 --- Monday

答案 1 :(得分:0)

查看date.weekday()函数。它是Python中datedatetime类的实例方法。它以整数形式返回星期几,星期一为0,星期日为6.因此,您希望跳过date.weekday() >= 5

的天数

在此处查看更多内容:https://docs.python.org/2/library/datetime.html