Php 确定商店是否营业?
在PHP和MySQL中-如何确定存储是打开的还是关闭的(返回true还是false) 如果商店关门,下一个营业时间怎么安排Php 确定商店是否营业?,php,mysql,database-design,strtotime,Php,Mysql,Database Design,Strtotime,在PHP和MySQL中-如何确定存储是打开的还是关闭的(返回true还是false) 如果商店关门,下一个营业时间怎么安排 营业时间表示例: +----+---------+----------+-----------+------------+---------+ | id | shop_id | week_day | open_hour | close_hour | enabled | +----+---------+----------+-----------+------------+-
营业时间表示例:
+----+---------+----------+-----------+------------+---------+
| 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_hour
和close_hour
是时间类型字段。桌子设计可以吗
当前时间的示例:
- 当前时间:周二23:00,-输出:打开,“周二16:30-23:30打开”
- 当前时间:周二23:40,-输出:关闭,“周四16:30-23:30开放”
星期四开放,因为禁用了开放时间.week\u day=3
现在如何处理午夜时间?这会变得更复杂
如您所见,在星期六(开放时间.星期日=5
),开放时间为下午17:15至01:30(第二天星期日关闭)
如果当前时间是星期日凌晨1:15,则商店仍将在营业时间.week\u day=5
营业
输出:打开,“在星期六17:15-01:30打开”过去,我使用没有日期的时间戳(从午夜开始的秒数)来处理这个问题。因此,周六的开盘价是62100
,收盘价是91800
我的想法是,这消除了接近午夜时所需的一些逻辑,因为您只需要将日期开始后的秒数与时间范围进行比较
而且很容易检查从“昨天”起它是否仍然开放——只需将86400
添加到当前“时间”(从一天开始算起的秒数)中,并对照前一天进行检查
可能都是一条SQL语句。您可以使用PHP date()函数并将其与您的营业时间进行比较
您可以执行类似于此递归函数的操作(不是工作的PHP代码,而是PHP与伪代码的组合):
/*$当前时间的格式应为日期(“His”)*/
功能检查时间($current\u day,$current\u time)
{
在这里获取今天的MySQL行
如果(开放时间.enabled==1,其中开放时间.week\u day==$current\u day)
{
如果((日期(“His”)>=营业时间。营业时间)和($current_time请不要一次发布多个问题。将你的问题分解成更小的部分,并询问具体情况。此外,这看起来像是家庭作业,在这里不受欢迎…@JanHančič这不是一次多个问题。我的问题是如何确定商店是开着还是关着。其次,这不是家庭作业。对我来说,这看起来像家庭作业,但是如果你说不是,那么我相信你:)
/* $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');
}
}