我需要检查当前时间是否在范围内
these r restaurant open timings ,timings can be like open now till next morning or closed for sometime same day and open next half same day till next day or midnight
examples
Case1: 10:00 01:00
Case2: 10:00 23:59
Case3: 10:00 00:00
Case4: 23:59 05:00
Case5: 08:35 15:30 && 17:30 02:00
Case6: 10:00 15:00 && 17:00 00:00所有的箱子都必须检查。
if((strtotime($s)<=strtotime($myTime)) && (strtotime($e)>=strtotime($myTime)))
{$open =1;}
if($e=="00:00")
{ if((strtotime($s)<=strtotime($myTime))&& (strtotime($myTime)>=strtotime("00:00")))
{$open =1;}}我哪里出错了,这是行不通的
发布于 2017-08-11 16:15:19
像这样的东西可能行得通。我还没有真正测试过它。
$currentTime = time();
function in_range($what, $min, $max) {
return $what >= $min && $what <= $max;
}
var_dump(in_range($currentTime, strtotime('08:35'), strtotime('15:30'));
// etc.发布于 2017-08-11 16:37:20
使用DateTime对象进行比较,如下所示。请参阅http://php.net/manual/en/class.datetime.php
$cases = array(
array(
'start' => new DateTime("10:00:00"),
'end' => new DateTime("12:00:00"),
),
array(
'start' => new DateTime("10:00:00"),
'end' => new DateTime("23:59:00"),
),
array(
'start' => new DateTime("10:00:00"),
'end' => new DateTime("00:00:00"),
),
array(
'start' => new DateTime("23:59:00"),
'end' => new DateTime("05:00:00"),
),
);
//adjust dates
$cases[2]['end']->modify('+1 day');
$cases[3]['start']->modify('-1 day');
$now = new DateTime();
foreach ($cases as $key => $value) {
if ($now > $value['start'] && $now < $value['end']) {
echo 'case ' . $key . ' ok' . PHP_EOL;
}
else {
echo 'case ' . $key . ' out of range' . PHP_EOL;
}
}发布于 2017-08-11 17:14:11
好的,我给你找了个麻烦。您想看看这是否得到了预期的输出吗?似乎在做我的本地测试。相当多的代码思维,结果是需要考虑的一些边缘情况。
它可能有一些可以重构和改进的部分,但如果它按预期工作,我将把它留给您。
<?php
$cases = [
[['start' => '09:00', 'end' => '01:00']],
[['start' => '10:00', 'end' => '23:59']],
[['start' => '10:00', 'end' => '00:00']],
[['start' => '23:59', 'end' => '05:00']],
[['start' => '10:00', 'end' => '15:00'], ['start' => '17:30', 'end' => '02:00']],
[['start' => '10:00', 'end' => '15:00'], ['start' => '17:30', 'end' => '00:00']],
];
$cases = setUpCases($cases);
foreach ($cases as $case) {
$withinTimeRange = isTimeWithinCase((new DateTime()), $case);
if ($withinTimeRange) {
break;
}
}
// Boolean True/False whether it is within any of the ranges or not.
// i.e. True = Shop Open, False = Shop closed.
var_dump($withinTimeRange);
function setUpCases($cases) {
return array_map(function($case) {
return convertToDateTimeObjects($case);
}, $cases);
}
function convertToDateTimeObjects($case) {
$formatted = [];
foreach ($case as $index => $times) {
$s = new DateTime();
list($hour, $minute) = explode(':', $times['start']);
$s->setTime($hour, $minute, 00);
$e = new DateTime();
list($hour, $minute) = explode(':', $times['end']);
$e->setTime($hour, $minute, 00);
if ($e < $s) $e->modify('+1 day');
$formatted[] = ['start' => $s, 'end' => $e];
}
return $formatted;
}
function isTimeWithinCase($time, $case) {
foreach ($case as $timerange) {
return ($time > $timerange['start'] && $time < $timerange['end']);
}
}https://stackoverflow.com/questions/45630042
复制相似问题