我有这个简单的商店小时PHP脚本。
您可以在数组中的商店的营业时间添加。
然后你在页面上回复它。
但是我有例如上午10:00到凌晨12:00 ..它打破了逻辑。
它应该说我们已经开放......但它说我们已经关闭了。
它适用于一天中的每一个时间..但是午夜有些不对劲。
请帮帮忙?我可能看不到容易的东西。
<?php
date_default_timezone_set('America/New_York');
$storeSchedule = [
'Monday' => ['10:00 AM' => '11:00 PM'],
'Tuesday' => ['10:00 AM' => '11:00 PM'],
'Wednesday' => ['10:00 AM' => '11:00 PM'],
'Thursday' => ['10:00 AM' => '11:00 PM'],
'Friday' => ['10:00 AM' => '12:00 AM'],
'Saturday' => ['10:00 AM' => '12:00 AM'],
'Sunday' => ['10:00 AM' => '11:00 PM']
];
$timestamp = time();
$status = '<span style="color:#fc2323">Closed now</span>';
$currentTime = (new DateTime())->setTimestamp($timestamp);
foreach ($storeSchedule[date('l', $timestamp)] as $startTime => $endTime) {
$startTime = DateTime::createFromFormat('h:i A', $startTime);
$endTime = DateTime::createFromFormat('h:i A', $endTime);
if (($startTime < $currentTime) && ($currentTime < $endTime)) {
$status = '<span style="color:#23fc41">OPEN</span>';
$todayIs = "owen";
break;
}
}
echo '<p style="padding-bottom:5px;">Hours: ' . $status . '</p>';
foreach($storeSchedule[date('l', $timestamp)] as $openHour => $closeHour) {
echo "<p style='padding-bottom:15px' class=\"show-store-hours\">" . date('l') . ": " . $openHour . " - " . $closeHour . " +</p>";
}
echo '<ul class="store-hours" style="margin: 0 auto; padding-bottom:25px">';
foreach ($storeSchedule as $storeDay => $hoursArray) {
foreach ($hoursArray as $startTime => $endTime) {
echo '<li>';
echo $storeDay;
echo ': <span>';
echo $startTime;
echo ' - ';
echo $endTime;
echo '</span></li>';
}
}
echo '<div class="clr"></div></ul>';
&GT;
答案 0 :(得分:0)
如果结束时间是午夜,那么尝试将1天添加到您的结束时间怎么样?我想你已经看到了这个结果,因为午夜时间实际上比所有开始时间都少。例如,星期五上午10点到午夜实际上(时间明智)相当于星期五上午10点到星期六上午12点。
还有另一种解决方法。您可以将截止时间发布为晚上11:59:59,并显示午夜时间。
要修复您的结束时间,您可以
if ($endtime < $starttime) {
$endtime=date_add($endtime, INTERVAL 1 DAY);}
答案 1 :(得分:0)
不确定这是否是最好的解决方法......
但这对我有用..感谢您的帮助。
if ( $endTime == "11:59 PM" ) {
$endTime = "12:00 AM";
}
在我已经存储了OPEN或CLOSED值之后,我在页面上回显了这个。
答案 2 :(得分:0)
您可以从H:i
格式字符串开始比较dateTime对象,然后将它们格式化回g:i A
。
区别在于:
H:i
$a = DateTime::createFromFormat('H:i', '24:00');
print_r($a);
DateTime Object ( [date] => 2017-04-30 00:00:00.000000 [timezone_type] => 3 [timezone] => Asia/Dubai )
g:i A
$a = DateTime::createFromFormat('g:i A', '12:00 AM');
print_r($a);
DateTime Object ( [date] => 2017-04-29 00:00:00.000000 [timezone_type] => 3 [timezone] => Asia/Dubai )
所以,你可以这样做:
$a = DateTime::createFromFormat('H:i', '10:00');
$b = DateTime::createFromFormat('H:i', '24:00');
$c = new DateTime();
var_dump($c > $a && $c < $b);
BOOL(真)
并将dateTime对象格式化回&#34; 12:00 AM&#34;格式:
print($b->format('g:i A'));
12:00 AM