Ste*_*hen 13 php datetime date strtotime
如果时间是AM到PM(例如:上午11点到晚上10点),我的代码工作正常,但如果操作时间是AM到AM(例如:上午9点 - 凌晨1点),它会中断.这是我的代码:
$datedivide = explode(" - ", $day['hours']); //$day['hours'] Example 11:00 AM - 10:00 PM
$from = ''.$day['days'].' '.$datedivide[0].'';
$to = ''.$day['days'].' '.$datedivide[1].'';
$date = date('l g:i A');
$date = is_int($date) ? $date : strtotime($date);
$from = is_int($from) ? $from : strtotime($from);
$to = is_int($to) ? $to : strtotime($to);
if (($date > $from) && ($date < $to) && ($dateh != 'Closed')) {
?>
<script type="text/javascript">
$(document).ready(function(){
$('.entry-title-container').append('<div class="column two"><h2 style="color:green;text-align: left;margin: 0;">OPEN<br /><span style="color:#222;font-size:12px;display: block;">Closes at <?php echo $datedivide[1]; ?></span></h2></div><br clear="all" />');
});
</script>
<?php
}
Run Code Online (Sandbox Code Playgroud)
cry*_*c ツ 37
您首先需要创建一个数组,该数组将保存您一周中的几天以及它们各自的关闭/打开时间范围.
/**
* I setup the hours for each day if they carry-over)
* everyday is open from 09:00 AM - 12:00 AM
* Sun/Sat open extra from 12:00 AM - 01:00 AM
*/
$storeSchedule = [
'Sun' => ['12:00 AM' => '01:00 AM', '09:00 AM' => '12:00 AM'],
'Mon' => ['09:00 AM' => '12:00 AM'],
'Tue' => ['09:00 AM' => '12:00 AM'],
'Wed' => ['09:00 AM' => '12:00 AM'],
'Thu' => ['09:00 AM' => '12:00 AM'],
'Fri' => ['09:00 AM' => '12:00 AM'],
'Sat' => ['12:00 AM' => '01:00 AM', '09:00 AM' => '12:00 AM']
];
Run Code Online (Sandbox Code Playgroud)
然后循环当天的时间范围并检查当前时间或提供的时间戳是否在一个范围内.您可以使用DateTime类为每个时间范围的开始/结束时间生成DateTime对象.
下面将执行此操作,并允许您指定时间戳,以防您想要检查提供的时间戳而不是当前时间.
// current or user supplied UNIX timestamp
$timestamp = time();
// 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 "We are currently: $status";
Run Code Online (Sandbox Code Playgroud)
见上面的DEMO
小智 6
修改为在 AWS Debian 服务器(位于西海岸)上使用的公认答案,其中我们的商店营业时间实际上是美国东部标准时间……也放入了 PHP 函数中。
/*
* decide based upon current EST if the store is open
*
* @return bool
*/
function storeIsOpen() {
$status = FALSE;
$storeSchedule = [
'Mon' => ['08:00 AM' => '05:00 PM'],
'Tue' => ['08:00 AM' => '05:00 PM'],
'Wed' => ['08:00 AM' => '05:00 PM'],
'Thu' => ['08:00 AM' => '05:00 PM'],
'Fri' => ['08:00 AM' => '05:00 PM']
];
//get current East Coast US time
$timeObject = new DateTime('America/New_York');
$timestamp = $timeObject->getTimeStamp();
$currentTime = $timeObject->setTimestamp($timestamp)->format('H:i A');
// loop through time ranges for current day
foreach ($storeSchedule[date('D', $timestamp)] as $startTime => $endTime) {
// create time objects from start/end times and format as string (24hr AM/PM)
$startTime = DateTime::createFromFormat('h:i A', $startTime)->format('H:i A');
$endTime = DateTime::createFromFormat('h:i A', $endTime)->format('H:i A');
// check if current time is within the range
if (($startTime < $currentTime) && ($currentTime < $endTime)) {
$status = TRUE;
break;
}
}
return $status;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18244 次 |
最近记录: |