动态开放时间简码始终显示为已关闭

时间:2019-08-15 10:28:06

标签: php wordpress shortcode

我遇到了一个简短的代码问题,该代码我创建来缩短商店的营业时间并根据营业时间数组显示“营业”或“营业”状态。

我让它工作了,所以我曾一度以为是,但是自那以后似乎已经停止工作了。我不认为我对此进行了很多更改,并且还尝试了本SO帖子中提到的一些替代方法:Determine If Business Is Open/Closed Based On Business Hours

其他方法要么无效,要么只是标记错误。

我希望将其设置为欧洲/伦敦时间戳记,因为这家商店仅位于英国。有什么想法我在这里可能做错了吗?

与此同时,我会继续插电,对我来说似乎很奇怪。

我知道我使用的原始代码是基于此处的旧文章(大约6年),因此我想知道它是否可能已过时。我们的服务器正在运行PHP 7。

//open/closing times
function opening_times() {
ob_start();
$storeSchedule = [
'Sun' => ['10:00 AM' => '15:00 PM'],
'Mon' => ['10:00 AM' => '17:00 PM'],
'Tue' => ['10:00 AM' => '17:00 PM'],
'Wed' => ['00:00 AM' =>  '00:00 AM'],
'Thu' => ['10:00 AM' => '17:00 PM'],
'Fri' => ['10:00 AM' => '17:00 PM'],
'Sat' => ['09:00 AM' => '17:00 PM']
];

// current OR user supplied UNIX timestamp
$timeObject = new DateTime('Europe/London');
$timestamp = $timeObject->getTimeStamp();

// default status
$status = 'closed';

// get current time object
$currentTime = (new DateTime())->setTimestamp($timestamp);

// loop through time ranges for current day
foreach ($storeSchedule[date('D', $timestamp)] as $startTime => $endTime) {

// create time objects from start/end times
$startTime = DateTime::createFromFormat('h:i A', $startTime);
$endTime   = DateTime::createFromFormat('h:i A', $endTime);

// check if current time is within a range
if (($startTime < $currentTime) && ($currentTime < $endTime)) {
    $status = 'open';
    break;
    }
}

echo '<div><i class="far fa-clock fa-3x"></i><span class="open-times"><small>We are ' . $status . '</small><br>';
return ob_get_clean();
}
add_shortcode( 'open_times', 'opening_times' );

在某种程度上,状态始终显示为“已关闭”是可行的,如果商店未打开,则该状态应为默认状态。

它在任何时候都不再显示为“打开”状态。符合开放时间标准时,应显示为“开放”。

1 个答案:

答案 0 :(得分:1)

不知道为什么选择在要创建的数组中使用AM和PM时间格式,但是基本上没有17:00 PM应该是5:00 PM,因此只需修复数组和代码会起作用。

问题是试图在此行中从17:00 PM创建DateTime。基本上每次都失败。

$endTime   = DateTime::createFromFormat('h:i A', $endTime);

所以只需修复数组以使用有效时间,代码就可以工作。

$storeSchedule = [
    'Sun' => ['10:00 AM' => '03:00 PM'],
    'Mon' => ['10:00 AM' => '05:00 PM'],
    'Tue' => ['10:00 AM' => '05:00 PM'],
    'Wed' => ['00:00 AM' => '00:00 AM'],
    'Thu' => ['10:00 AM' => '05:00 PM'],
    'Fri' => ['10:00 AM' => '05:00 PM'],
    'Sat' => ['09:00 AM' => '05:00 PM']
];