PHP检查时间是否福尔斯范围内,质疑常见解决方案

vawmfj5a  于 2023-06-04  发布在  PHP
关注(0)|答案(4)|浏览(459)

我必须检查当前白天是否福尔斯特定范围内。我在网上查了一下,发现了几个类似的解决方案:

$now = date("His");//or date("H:i:s")

$start = '130000';//or '13:00:00'
$end = '170000';//or '17:00:00'

if($now >= $start && $now <= $end){
echo "Time in between";
}
else{
echo "Time outside constraints";
}

如果这两个条件都必须为真,那么当我们假设$start是06:00:00,$end是02:00:00时,如何实现这一点呢?
如果我们假设它是01:00:00,那么在这种情况下,第一个条件不可能为真。
谁有办法用不同的方式处理这个问题?
谢谢!

fdx2calv

fdx2calv1#

当然,你必须在比较中考虑到日期。

<?php

$start = strtotime('2014-11-17 06:00:00');
$end = strtotime('2014-11-18 02:00:00');

if(time() >= $start && time() <= $end) {
  // ok
} else {
  // not ok
}
oxf4rvwz

oxf4rvwz2#

如果需要检查时间范围是否超过午夜

function isWithinTimeRange($start, $end){

    $now = date("H:i:s");
    list($hours, $minutes, $seconds) = explode(':', $now, 3);
    $now = $minutes * 60 + $hours * 3600 + $seconds;

    // time frame rolls over midnight
    if($start > $end) {
        
        // if current time is past start time or before end time
        
        if($now >= $start || $now < $end){
            return true;
        }
    }

    // else time frame is within same day check if we are between start and end
    
    else if ($now >= $start && $now <= $end) {
        return true;
    }

    return false;
}

然后,您可以通过以下方式了解您是否在该时间范围内

echo isWithinTimeRange(130000, 170000);
vd2z7a6w

vd2z7a6w3#

date_default_timezone_set("Asia/Colombo");
            $nowDate = date("Y-m-d h:i:sa");
            //echo '<br>' . $nowDate;
            $start = '21:39:35';
            $end   = '25:39:35';
            $time = date("H:i:s", strtotime($nowDate));
            $this->isWithInTime($start, $end, $time);

 function isWithInTime($start,$end,$time) {

            if (($time >= $start )&& ($time <= $end)) {
               // echo 'OK';
                return TRUE;
            } else {
                //echo 'Not OK';
                return FALSE;
            }

}
igsr9ssn

igsr9ssn4#

由于声誉不高,无法发表评论,但@ D官方答案很好,但要注意比较中的不一致性。
原创

// if current time is past start time or before end time
 if($now >= $start || $now < $end){

应该是imho

// if current time is past start time or before end time
 if($now >= $start || $now <= $end){

相关问题