2013-08-13 2 views
0

Извините, это обязательно будет ДЕЙСТВИТЕЛЬНО простым ответом на глупый вопрос, но я страдаю от замораживания мозга!Функция времени PHP - Возвращение Истина, если время между двумя значениями

Мне нужна функция, которая вернет true, если текущее время находится между началом и временем окончания, поэтому приложение не будет работать. Эффективно «тихое время»;

Пользователь может установить время начала и и время окончания в 24hr часы:

$start_time = "0300"; 
$end_time = "0900"; 

Используя следующий почти работает:

function isQuietTime($start,$end) 
    { 
     if((date("Hm") >= $start) && (date("Hm") <= $end)) {return TRUE;} else {return FALSE;} 
    } 

Но что, если время начала 2300, конца время 0600, а текущее время 0300? Вышеуказанная функция вернет false. Проблема возникает, когда время начала до конца текущего дня, а время окончания - следующий день. Как мне заставить это работать?

Спасибо!

+1

использовать временную метку unix. – michi

ответ

4
function fixedIsQuietTime($start, $end) 
{ 
    if ($start < $end) 
     return isQuietTime($start, $end); 
    else 
     return ! isQuietTime($end, $start); 
} 
+0

Ага, очень хитрый! Я как бы надеялся, что это будет одна функция, а не две, но она работает. Любые мысли о том, как я мог объединить две функции в одну? – iagdotme

+0

О, я полагаю, что-то, как это будет работать ... 'функция isQuietTime ($ старт, $ конец, $ сейчас) { если ($ старт <$ конец) \t { если (($ Теперь> = $ старт) && ($ Теперь <= $ конец)) {вернуть TRUE;} еще {возвращать FALSE} \t \t} \t еще \t { \t \t если (($ Теперь> = $ старт) && ($ Теперь <= $ end)) {return FALSE;} else {return TRUE;} \t \t} } ' – iagdotme

+0

Вы правы. Кстати, разработчик, который выполнял будильник в моем смартфоне, не разрешил подобную проблему - если вы установите будильник в 11:00 в течение 7 часов, он будет звонить в 7 утра через неделю :). Удачи! – mkf

1

Я бы рекомендовал использовать UNIX-время. Поэтому напишите функцию, чтобы преобразовать время ввода в UNIX-время. Что-то вроде этого:

function to_unix_time($string){ 
    // Something like this... 
    $unix_time = mktime(); 
    return $unix_time; 
} 

function isQuietTime($start, $end){ 
    $now = time(); 
    $stime = to_unix_time($start); 
    $etime = to_unix_time($end); 
    if($now > $stime && $now < $etime){ 
     //its quiet time! 
     return true; 
    } 
} 
+0

Спасибо за ваш ответ. В идеале я бы хотел избежать конвертации в unix-время для своего приложения, но мне нравится ваше мышление! – iagdotme

Смежные вопросы