PHP存储时间脚本,无法让午夜正常工作



我有一个简单的存储时间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 . " &#43;</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

最新更新