为了账号安全,请及时绑定邮箱和手机立即绑定

动态开放时间短代码始终显示已关闭

动态开放时间短代码始终显示已关闭

PHP
肥皂起泡泡 2021-11-26 14:41:22
我创建的短代码有问题,用于拉取商店的营业时间并根据营业时间数组显示“营业”或“营业”状态。我让它工作了,所以我曾经想过,但它似乎已经停止工作了。替代方法要么不起作用,要么只是标记了错误。我希望将其设置为欧洲/伦敦时间戳,因为该商店仅位于英国。有什么想法我可能在这里做错了吗?在此期间,我会继续努力,但对我来说似乎很奇怪。我知道我使用的原始代码基于这里的旧帖子(大约 6 岁),所以我想知道它是否可能是过时的 PHP。我们的服务器运行的是 PHP 7。//open/closing timesfunction 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 dayforeach ($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 rangeif (($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 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

不知道为什么你选择在你自己创建的数组中使用 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']

];


查看完整回答
反对 回复 2021-11-26
  • 1 回答
  • 0 关注
  • 180 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信