Реализация фильтра «открыто сейчас» для списка мест в веб-приложении - PullRequest
1 голос
/ 28 октября 2011

Мне нужно внедрить фильтр «открыт сейчас» для моего сайта, который перечисляет места, но я не знаю, с чего начать.Мой веб-сайт реализован с использованием Python, webpy, базы данных MySQL.

Я должен хранить часы работы для каждого места и выбирать места, которые открыты сейчас.

Пример часов работы: "Работаетс 9:30 до 23:00 по будням, с 11:00 до 23:00 по выходным »или« Работает круглосуточно, кроме 6:00 до 7:00 ».

Часы работы могут быть разными для каждого дня недели, день может быть большеодин интервал времени, и мне нужно взломать исключения для определенных праздников.

Любые советы / предложения по интерфейсу, схеме данных и запросу приветствуются.

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"

1 Ответ

2 голосов
/ 28 октября 2011

Я использовал приложение под названием django-schedule , которое имеет некоторые похожие функции.

Если вы покопаетесь в источнике, вы увидите, что под ним используется python-dateutil (см. Правила) Содержит список правил расписания для каждого события в базе данных.

Вы можете использовать подобную тактику. Когда запрашивается статус места встречи, посмотрите, подходит ли текущая дата и время в начало / конец события, предусмотренного правилами расписания места. Если это так, он открыт.

...