首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当前时间在时间范围内

当前时间在时间范围内
EN

Stack Overflow用户
提问于 2017-08-11 16:06:12
回答 5查看 661关注 0票数 0

我需要检查当前时间是否在范围内

代码语言:javascript
复制
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

所有的箱子都必须检查。

代码语言:javascript
复制
       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;}}

我哪里出错了,这是行不通的

EN

回答 5

Stack Overflow用户

发布于 2017-08-11 16:15:19

像这样的东西可能行得通。我还没有真正测试过它。

代码语言:javascript
复制
$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.
票数 1
EN

Stack Overflow用户

发布于 2017-08-11 16:37:20

使用DateTime对象进行比较,如下所示。请参阅http://php.net/manual/en/class.datetime.php

代码语言:javascript
复制
$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;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2017-08-11 17:14:11

好的,我给你找了个麻烦。您想看看这是否得到了预期的输出吗?似乎在做我的本地测试。相当多的代码思维,结果是需要考虑的一些边缘情况。

它可能有一些可以重构和改进的部分,但如果它按预期工作,我将把它留给您。

代码语言:javascript
复制
<?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']);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45630042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档