2011-10-27 1 views
1

경기장을 나열하는 웹 사이트의 "지금 열기"필터를 구현해야하지만 시작할 위치를 모르겠습니다. 내 웹 사이트는 Python, webpy, MySQL 데이터베이스를 사용하여 구현됩니다.웹 응용 프로그램의 경기장 목록에 대한 "지금 열기"필터 구현

모든 공연장의 개관 시간을 저장하고 지금 열리는 공연장을 선택해야합니다.

시간을 여는의 예

는 "주말에 오후 11 평일 오후 11시 오전 11 오전 9시 30 분에서 작동", 또는 "오전 7시부터 오전 6시까지을 제외한 라운드 시계 작품".

개장 시간은 요일마다 다를 수 있으며 하루에 두 개 이상의 시간 간격이있을 수 있으며 특정 휴일에 대한 예외 사항을 해킹해야합니다.

인터페이스, 데이터 스키마 및 쿼리에 대한 모든 팁/제안을 환영합니다.

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

'from ... import *'는 피해야합니다. 가져올 항목을 명확하게 명시하십시오. – ThiefMaster

+0

수정 해 주셔서 고맙습니다. 최종 코드에서 '가져 오기'를하지 않겠습니다. –

답변

2

비슷한 기능이있는 django-schedule이라는 앱을 사용했습니다.

소스를 파헤 치면 아래에 python-dateutil (rrules 참조)이 사용 된 것을 볼 수 있습니다. 데이터베이스의 각 이벤트에 대한 스케줄 j 목록을 유지합니다.

비슷한 전략을 사용할 수 있습니다. 개최지 공개 상태가 조회 될 때 현재 날짜 시간이 개최지 일정 규칙에 의해 제공된 발생의 시작/끝 안에 들어 있는지 확인하십시오. 그렇다면, 그것은 열려 있습니다.

+0

제안에 따라 필터 코드를 구현했습니다. 휴일에 예외를 설정하는 방법에 대한 아이디어가 있습니까? –

+0

가장 간단한 방법은 주요 공휴일 목록을 유지하고 코드에 다른 if 문을 추가하는 것입니다 (예 : 'maj_holiday_list에있는 now.date() : ven_is_open = False' –

+0

장소는 다른 휴일에 다른 스케줄을 가질 수 있습니다. 나는 자동적으로 그들 모두를 닫을 것을 생각하고있다. 그리고 그들이 공휴일 스케줄을 준다면 규칙적인 스케줄 대신에 그것을 사용한다. –