2012-03-03 14 views
7

PHPとMySQLで - ストアがオープンかクローズかを判断する方法(trueまたはfalseを返します)?ストアが開いているかどうかを確認しますか?

店舗が閉鎖されている場合、次の営業時間を取得する方法もありますか?

Opening_Hoursテーブルの例:

+----+---------+----------+-----------+------------+---------+ 
| 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 | 
+----+---------+----------+-----------+------------+---------+ 

open_hourclose_hourは、TIME型のフィールドです。テーブルのデザインは大丈夫ですか?現在の倍の

例:

  • 現在時刻:火曜夜11時、 - 出力:オープン、 'オープン火曜16:30 - 夜11時30'

  • 現在時刻:Tue 23:40、 - 出力:閉じる、 '開館時間16:30 - 23:30'

木曜日にオープンOpening_Hours.week_day = 3が今深夜の時間をどのように処理するか無効


ですので?これはもっと複雑になります。

現在時刻が、その後、日曜日午前1時15 AMである場合は、土曜日(Opening_Hours.week_day = 5)に、それは1時30分に午前17時15分PMから

(閉じた翌日日曜日)オープンして見ることができるように店舗はまだOpening_Hours.week_day = 5にオープンベースになります。

出力:オープン、「土曜のオープン17時15分 - 午前1時30分」

+0

を一度に複数の質問を投稿しないでください。あなたの問題をより小さな部分に集中させ、詳細を聞かせてください。また、これはここで歓迎されていない宿題のように見えます... –

+5

@JanHančič一度に複数の質問ではありません。私の質問は、店が開いているか閉じているかを調べる方法です。第二に、これは宿題ではない。 – user1246800

+0

それは私の宿題のように見えますが、あなたがそれがそうでないと言うなら、私はあなたを信じています:) –

答えて

3

過去には、私は、日付(午前0時からの秒)することなく、タイムスタンプを使用してこれを扱ってきました。だから土曜日は開店は62100、閉業は91800となります。

これは、日付の開始から時間範囲までの秒数を比較するだけで済むので、クローズが深夜を過ぎるときに必要なロジックの一部が削除されたと考えました。

また、「昨日」からまだ開いているかどうかを確認するのはかなり簡単です。ちょうど86400を現在の「時刻」(開始日からの秒数)に加え、前日にチェックしてください。

おそらくすべての単一のSQLステートメント。

1

PHPのdate()関数を使用して、営業時間と比較することができます。

あなたはこの再帰関数(PHPコードを作業していて、PHPは擬似コードと結合していない)のような何かを行うことができます。

/* $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'); 
    } 
} 
関連する問題