我有一个简单的存储时间php脚本。
您在数组中的商店的开放时间添加。
然后您在页面上回声。
但是我有例如上午10:00至12:00 am ..它打破了逻辑。
应该说我们开放...但是它说我们已经关闭了。
它一天中的每隔时间都可以工作..但是午夜有问题。
请帮忙吗?我可能没有看到一些简单的东西。
<?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>';
?>
如果末日是午夜,尝试在末日添加1天?我认为您看到了这个结果,因为午夜的时间实际上比所有开始时间都少。例如,星期五上午10点至午夜实际上是(时间明智的(,相当于星期五至周六上午12点。
。也有另一个解决方法。您可以将结束时间发布为11:59:59 pm,并在午夜展示这些时间。
要修复您的末日,您可以做
if ($endtime < $starttime) {
$endtime=date_add($endtime, INTERVAL 1 DAY);}
不确定这是否是最好的解决方法...
,但这对我有用..谢谢您的帮助。
if ( $endTime == "11:59 PM" ) {
$endTime = "12:00 AM";
}
我已经存储了打开或关闭的值后在页面上回声。
您可以从 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(true(
并将DateTime对象格式化返回到" 12:00 AM"格式:
print($b->format('g:i A'));
12:00 AM