我在检测商店是否在午夜后仍然营业或关闭时遇到问题。
周二($weekday = 2
),商店营业时间为下午6点至凌晨1:30(午夜后)
假设当前时间是01:05 AM
$weekday = 2;
//Convert current time to minutes (01:05)
$currentTime = ($weekday - 1) * 1440 + "01" * 60 + "05";
//Current Week Day
$shopOpenTime = "18:00";
$shopCloseTime = "01:30";
$open = explode(':', $shopOpenTime);
$close = explode(':', $shopCloseTime);
//Convert to Minutes;
$MinutesOpen = (($weekday - 1) * 1440) + ($open[0] * 60 + $open[1]);
$MinutesClose = (($weekday - 1) * 1440) + ($close[0] * 60 + $close[1]);
if ($MinutesClose < $MinutesOpen)
$MinutesClose += 60 * 24;
if (($currentTime >= $MinutesOpen) && ($currentTime < $MinutesClose)) {
echo "Shop Is Open";
} else {
echo "Shop Is Close";
}
解决此问题的解决方案是什么?
答案 0 :(得分:1)
老实说,应该重写整个代码块。逻辑注定是因为你的$ weekday参数将$ currentTime的当天比作$ minutesOpen。你添加了24小时到$ minutesClose将它推到(技术上是Wed),现在比较是正确的。它表示已关闭,因为您尚未将$ currentTime在24小时内结束。
所以,如果你只是用英语阅读这个,那就是星期二凌晨1:30(星期一晚上就在星期一晚上)和星期二下午6:30进行比较,这就失败了(这是因为$ weekday参数在$ currentTime中设置为星期二。
在没有看到你如何填充你的$ weekday参数的情况下,我猜测当你实际运行这个代码时使用date()函数弹出,在12:01(星期二),它会增加到星期三,然后你的代码将按照婚礼的时间填充开放和关闭时间,这也将是关闭的。
对不起,我知道这不是解决整个逻辑的解决方案,但它会在生产环境中产生巨大的缺陷。
如果你只想让它发挥作用,坚持'周二'的心态/背景,你必须反映周二的感觉当时的时间,那就是25:05意味着结婚时的1:05,而不是01:05星期二第二次。这使得上下文保持正确并且有效。
$currentTime = ($weekday - 1) * 1440 + "25" * 60 + "05";
答案 1 :(得分:0)
您正在将当前时间与将在当前时间开始的开放时间进行比较。但由于昨天开始的开放期,该店目前正在营业。只是与昨天的时期相比:
if ((($currentTime >= $MinutesOpen - 1440) && ($currentTime < $MinutesClose - 1440)) || (($currentTime >= $MinutesOpen) && ($currentTime < $MinutesClose))) {
但要注意,只有当商店每天同时打开/关闭时,这才有效。