PHP检查时间是否在两次之间,无论日期如何

时间:2014-11-25 16:09:59

标签: php time

我正在编写一个脚本,我必须检查时间范围是否介于两次之间,无论日期如何。

例如,我有两个日期:

$from = 23:00
$till = 07:00

我有以下时间检查:

$checkFrom = 05:50 
$checkTill = 08:00

我需要创建一个脚本,如果检查值在$ from / $ till范围之间,则返回true。在此示例中,函数应返回true,因为$ checkFrom位于$ from / $ till范围之间。但以下情况也应如此:

$checkFrom = 22:00
$checkTill = 23:45

6 个答案:

答案 0 :(得分:23)

尝试此功能:

function isBetween($from, $till, $input) {
    $f = DateTime::createFromFormat('!H:i', $from);
    $t = DateTime::createFromFormat('!H:i', $till);
    $i = DateTime::createFromFormat('!H:i', $input);
    if ($f > $t) $t->modify('+1 day');
    return ($f <= $i && $i <= $t) || ($f <= $i->modify('+1 day') && $i <= $t);
}

demo

答案 1 :(得分:3)

基于2astalavista的回答:

您需要正确格式化时间,一种方法是使用PHP的strtotime()函数,这将创建一个可用于比较的unix时间戳。

function checkUnixTime($to, $from, $input) {
    if (strtotime($input) > strtotime($from) && strtotime($input) < strtotime($to)) {
        return true;
    }
}

答案 2 :(得分:2)

以下功能即使对旧版本的php也适用:

function isBetween($from, $till, $input) {
    $fromTime = strtotime($from);
    $toTime = strtotime($till);
    $inputTime = strtotime($input);

    return($inputTime >= $fromTime and $inputTime <= $toTime);
}

答案 3 :(得分:0)

此代码对我有用

if($ start_time <= date(“ H:i”)&& $ end_time> = date(“ H:i”)) {

}

答案 4 :(得分:0)

$tomorrow = new DateTime('tomorrow');

$currentTime = strtotime(date('Y-m-d H:i'));
$startTime = strtotime(date('Y-m-d').' 23:00');

// $endtime date will be next day during time 23 to 00.
if (strtotime(date('H:i')) > strtotime('23:00') && strtotime(date('H:i')) < strtotime('00:00')) {
    $endTime = strtotime($tomorrow->format('Y-m-d').' 07:00');
} else {
    $endTime = strtotime(date('Y-m-d').' 07:00');
}

$flag = false;
if ($currentTime > $startTime || $currentTime < $endTime) {
    $flag = true;
}

return $flag;

答案 5 :(得分:-1)

试试这个:

function checkTime($From, $Till, $input) {
    if ($input > $From && $input < $Till) {
        return True;
    } else {
        return false;
}