简体   繁体   中英

PHP check if time falls within range, questioning common solution

I have to check if the current daytime falls in a specific range. I looked up the internet and found several similar solutions like this one:

$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";
}

If both conditions have to be true, how can this bis achieved when we assume that $start is 06:00:00 and $end is 02:00:00.

If we make the assumption that it is 01:00:00, in this case the first condition can't be true.

Has anybody an idea to handle this problem differently?

Thanks!

Naturally, you'd have to account for date in your comparisons.

<?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
}

If you need to check whether or not the time frame rolls over midnight

    function isWithinTimeRange($start, $end){

        $now = date("His");

        // 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;
    }

You can then get whether or not you are within that time frame by

echo isWithinTimeRange(130000, 170000);
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;
            }

}

Cannot comment due to low reputation, but @DOfficial answer is great but be aware of inconsistency in comparision.

Original

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

Should be imho

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM