2012-03-03 8 views
7

En PHP et MySQL - comment déterminer si le magasin est ouvert ou fermé (retourner vrai ou faux)?Déterminer si le magasin est ouvert?

Comment obtenir les prochaines heures d'ouverture si le magasin est fermé?

Exemple de Opening_Hours tableau:

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

Le open_hour et close_hour sont des champs de type TIME. Le design de la table est ok?

Exemple de temps actuels:

  • Heure actuelle: 23:00 Mar - Sortie : Open, Open au mar 16:30-23h30 '

  • heure actuelle: mar 23h40, - sortie: Fermer, 'Ouvert à Thur 16:30-23:30'

Ouvert le jeudi, car Opening_Hours.week_day = 3 est désactivé


Maintenant, comment gérer le temps de minuit? Cela devient plus compliqué.

Comme vous pouvez le voir, le samedi (Opening_Hours.week_day = 5), il est ouvert de 17h15 à 01h30 (dimanche lendemain fermé)

Si l'heure actuelle est dimanche 01h15, le magasin serait toujours ouvert base sur Opening_Hours.week_day = 5.

sortie: Open, Open au sam 17 heures 15-01h30 '

+0

S'il vous plaît ne pas poster plusieurs questions à la fois. Freinez votre problème en plus petites pièces et demandez des détails. Aussi cela ressemble à des devoirs qui ne sont pas les bienvenus ici ... –

+5

@ JanHančič Ce n'est pas plusieurs questions à la fois.Ma question est comment trouver le magasin est ouvert ou fermé. Deuxièmement, ce n'est pas un devoir. – user1246800

+0

Cela ressemble à mes devoirs, mais si vous dites que ce n'est pas le cas, je vous crois :) –

Répondre

3

Dans le passé, je l'ai traité cela en utilisant un horodatage sans date (secondes depuis minuit). Donc, pour samedi, l'ouverture serait 62100 et la clôture serait 91800. Ma pensée était que cela enlève une partie de la logique nécessaire quand une clôture croise minuit, comme vous avez seulement besoin de comparer les secondes depuis le début de la date à la plage de temps.

Et il est assez facile de vérifier si elle est encore ouverte depuis 'hier' - il suffit d'ajouter 86400 à l'heure actuelle (secondes depuis le début de la journée) et vérifier par rapport à la veille.

Probablement une instruction SQL unique.

1

Vous pouvez utiliser la fonction PHP date() et la comparer à vos heures d'ouverture.

Vous pouvez faire quelque chose comme cette fonction récursive (ne fonctionne pas de code PHP, mais PHP combiné avec 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'); 
    } 
} 
Questions connexes