对web应用中的场馆列表实施“现在开放”筛选器

2024-04-23 15:12:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要为我的网站实现“现在开放”过滤器,列出场馆,但我不知道从哪里开始。我的网站是用Python,webpy,MySQL数据库实现的。你知道吗

我必须存储每个场馆的开放时间,并选择现在开放的场馆。你知道吗

开放时间的一个例子:“工作日从上午9:30到晚上11:00,周末从上午11:00到晚上11:00”,或“不包括早上6点到早上7点的24小时工作”。你知道吗

一周中的每一天的开放时间都可能不同,一天可以有一个以上的时间间隔,我需要为特定的节假日破解例外。你知道吗

欢迎对界面、数据模式和查询提出任何提示/建议。你知道吗

UPD:我已经想出了这个解决方案,可以吗?你知道吗

from dateutil.relativedelta import *
from dateutil.rrule import *
from datetime import *
from date import *

# venue can have many rules
hours_start = 23
minutes_start = 30
hours_end = 13  # if time_end is less than time_start then it ends next day
minutes_end = 30
days_of_week = (TH)

hours_diff = hours_end - hours_start
minutes_diff = minutes_end - minutes_start

if hours_diff < 0 or hours_diff == 0 and minutes_diff < 0:
    hours_diff += 24

datetime_start = date.today() + relativedelta(hours=+hours_start, minutes=+minutes_start, days=-1) # Yesterday time_start
now = datetime.now()
occurrence = rrule(WEEKLY, wkst=MO, byweekday=days_of_week, dtstart=datetime_start).before(now, True)

if now <= occurrence + relativedelta(hours=hours_diff, minutes=minutes_diff):
    print "IS OPEN NOW"

Tags: fromimportdatetimeiftime时间diffdays
1条回答
网友
1楼 · 发布于 2024-04-23 15:12:14

我使用了一个名为django-schedule的应用程序,它有一些类似的功能。你知道吗

如果深入到源代码,您将看到它在下面使用python-dateutil(请参阅rrules)。它为数据库中的每个事件保留一个计划规则列表。你知道吗

你可以使用类似的策略。当查询场馆开放状态时,查看当前日期时间是否符合场馆日程规则提供的事件开始/结束时间。如果是,它是开放的。你知道吗

相关问题 更多 >