2012-03-03 31 views
7

Trong PHP và MySQL - làm cách nào để xác định xem Cửa hàng đang mở hay Đóng (trả lại đúng hay sai)?Xác định xem cửa hàng có mở không?

Cũng như thế nào để có được những giờ mở cửa tiếp theo nếu các cửa hàng đóng cửa?

Ví dụ về Opening_Hours bảng:

+----+---------+----------+-----------+------------+---------+ 
| id | shop_id | week_day | open_hour | close_hour | enabled | 
+----+---------+----------+-----------+------------+---------+ 
| 1 |  1 |  1 | 16:30:00 | 23:30:00 |  1 | 
| 2 |  1 |  2 | 16:30:00 | 23:30:00 |  1 | 
| 3 |  1 |  3 | 16:30:00 | 23:30:00 |  0 | 
| 4 |  1 |  4 | 16:30:00 | 23:30:00 |  1 | 
| 5 |  1 |  5 | 10:00:00 | 13:00:00 |  1 | 
| 6 |  1 |  5 | 17:15:00 | 00:30:00 |  1 | 
| 7 |  1 |  6 | 17:15:00 | 01:30:00 |  1 | 
| 8 |  1 |  7 | 16:30:00 | 23:30:00 |  0 | 
+----+---------+----------+-----------+------------+---------+ 

Các open_hourclose_hour là lĩnh vực loại LÚC NÀO. Thiết kế bảng ok?

Ví dụ về lần hiện tại:

  • Thời gian hiện tại: Tue 23:00, - Output: Open, chọn 'Open tại Tue 16:30-23:30'

  • Hiện tại: Thứ Ba 23:40, - Đầu ra: Đóng, 'Mở tại Thur 16:30 - 23:30'

mở hôm thứ Năm vì Opening_Hours.week_day = 3 bị vô hiệu hóa


Bây giờ làm thế nào để xử lý thời gian nửa đêm? Điều này trở nên phức tạp hơn.

Như bạn có thể thấy, vào thứ bảy (Opening_Hours.week_day = 5), nó mở cửa từ 17:15 AM đến 01:30 (đóng cửa ngày hôm sau Chủ Nhật)

Nếu thời điểm hiện tại là chủ nhật 01:15, sau đó các cửa hàng sẽ vẫn mở trên cơ sở Opening_Hours.week_day = 5.

Output: Open, chọn 'Open tại Sat 17:15-01:30'

+0

Xin đừng gửi nhiều câu hỏi cùng một lúc. Phanh vấn đề của bạn thành các phần nhỏ hơn và yêu cầu chi tiết cụ thể. Ngoài ra điều này trông giống như bài tập về nhà mà không được hoan nghênh ở đây ... –

+5

@ JanHančič Nó không phải là nhiều câu hỏi cùng một lúc.Câu hỏi của tôi là làm thế nào để tìm ra cửa hàng là mở hoặc đóng cửa. Thứ hai, đây KHÔNG phải là bài tập về nhà. – user1246800

+0

Nó trông giống như bài tập về nhà với tôi, nhưng nếu bạn nói nó không phải là sau đó tôi tin rằng bạn :) –

Trả lời

3

Trong quá khứ, tôi đã xử lý điều này bằng cách sử dụng một tem thời gian mà không có một ngày (giây kể từ nửa đêm). Vì vậy, cho thứ bảy, mở sẽ là 62100 và đóng sẽ là 91800.

Suy nghĩ của tôi là điều này sẽ loại bỏ một số logic cần thiết khi đóng gần nửa đêm, vì bạn chỉ cần so sánh số giây kể từ ngày bắt đầu ngày đến phạm vi thời gian.

Và nó khá dễ dàng để kiểm tra xem nó vẫn mở từ 'ngày hôm qua' - chỉ cần thêm 86400 vào 'thời gian' hiện tại (giây kể từ đầu ngày) và kiểm tra ngày hôm trước.

Có lẽ tất cả một câu lệnh SQL duy nhất.

1

Bạn có thể sử dụng ngày PHP() chức năng và so sánh nó với giờ mở cửa của bạn.

Bạn có thể làm một cái gì đó giống như chức năng này đệ quy (không hoạt động mã PHP, nhưng PHP kết hợp với pseudo-code):

/* $current_time should be in the format of date("His") */ 
function check_hours($current_day, $current_time) 
{ 
    Get the MySQL row for today here 

    if (Opening_Hours.enabled == 1 WHERE Opening_Hours.week_day == $current_day) 
    { 
     if ((date("His") >= Opening_Hours.open_hour) and ($current_time <= Opening_Hours.close_hour)) 
     { 
      // convert_numeric_day_to_full_representation isn't a real function! make one 
      return 'Open: ' . convert_numeric_day_to_full_representation($current_day) . ' ' . Opening_Hours.open_hour . ' – ' . Opening_Hours.close_hour; 
     } 
     elseif (date("His") < Opening_Hours.open_hour) 
     { 
      return 'Closed: Next opening hours: ' . convert_numeric_day_to_full_representation($current_day) . ' ' . Opening_Hours.open_hour . ' – ' . Opening_Hours.close_hour; 
     } 
     else 
     { 
      return check_hours($tomorrow, '000000'); 
     } 
    } 
    else 
    { 
     return check_hours($tomorrow, '000000'); 
    } 
} 
Các vấn đề liên quan