PHP Время между двумя временами

Я пытаюсь заставить некоторый код работать, чтобы определить, между какими парами значений времени находится текущее время. Код, который я использую, приведен ниже. Однако я продолжаю получать сообщение «NO MATCH», хотя текущее время попадает в один из диапазонов. Не знаю, где я ошибаюсь.

//GET CURRENT TIME
$tz_object = new DateTimeZone('America/New_York');
$current_time = new DateTime();
$current_time->setTimezone($tz_object);

//SET TIME RANGE PAIRS
$time1Start = '08:00:00';
$time1End = '16:59:59';
$time2Start = '17:00:00';
$time2End = '07:59:59';

//FORMAT TIMES
$current_time = DateTime::createFromFormat('H:i:s', $current_time);
$time1Start = DateTime::createFromFormat('H:i:s', $time1Start);
$time1End = DateTime::createFromFormat('H:i:s', $time1End);
$time2Start = DateTime::createFromFormat('H:i:s', $time2Start);
$time2End = DateTime::createFromFormat('H:i:s', $time2End);

//TIME 1 SLOT
if ($current_time >= $time1Start && $current_time <= $time1End)
    {
        echo 'RANGE 1';
    }
//TIME 2 SLOT   
elseif ($current_time >= $time2Start && $current_time <= $time2End)
    {
        echo 'RANGE 2';
    }
else
    {
        echo 'NO MATCH';
    }

**ОБНОВЛЕНИЕ**

Так что кажется, что это начинает давать сбой, когда я начинаю конвертировать с часовыми поясами. Если я передаю необработанное значение времени, оно работает нормально. Однако, глядя на это, я думаю, что НАМНОГО усложняю то, что пытаюсь сделать. По сути, мне просто нужно определить, находится ли текущее время между двумя значениями. Для моих целей меня не волнуют сегодня, завтра, вчера и т. д. Мне просто нужно знать, находится ли 16:42 между 08:00 и 15:00 или между 15:01 и 07:59. Мне это кажется достаточно простым, но я просто не могу заставить реализацию кода работать, как бы я ее ни упрощал.


person Jason    schedule 22.04.2014    source источник
comment
Какой смысл в $current_time = DateTime::...? $current_time УЖЕ является объектом даты и времени...   -  person Marc B    schedule 22.04.2014
comment
Ваше время окончания предшествует времени начала для времени 2, поэтому оно никогда не будет совпадать.   -  person John Conde    schedule 22.04.2014
comment
У меня работает (с небольшой очисткой, которая не должна влиять на результаты)   -  person John Conde    schedule 22.04.2014
comment
@JohnConde Спасибо! ТАК странно - я даже скопировал и вставил ваш код на свою страницу, чтобы попробовать это, и я все еще получаю тот же результат (НЕ СОВПАДЕНИЕ). Странно - буду дальше играть.   -  person Jason    schedule 22.04.2014
comment
Начните с проверки того, что дата и время для current_time соответствуют вашим ожиданиям (echo $current_time->format('Y-m-d H:i:s') )   -  person John Conde    schedule 22.04.2014
comment
@JohnConde Текущее время 2014-04-22 15:17:18 так что это должно попасть в мой диапазон 1. Странно.   -  person Jason    schedule 22.04.2014
comment
Можете ли вы сказать нам, для каких значений это работает и для каких значений это не работает? Я подозреваю, что комментарий @JohnConde о том, что $time2End < $time2Start, актуален. Попробуйте свой код с кучей разных значений для $current_time и посмотрите, где он не работает.   -  person Kryten    schedule 22.04.2014
comment
Хорошо, так что это странно. Если я вручную укажу время $current_time = '16:15:26'; $current_time = DateTime::createFromFormat('H:i:s', $current_time);, то это работает без проблем.   -  person Jason    schedule 22.04.2014


Ответы (1)


Это вы можете легко проверить вместо своего кода,

if(date('H:i:s') == $your_time){
 //your code;
}
person SagarPPanchal    schedule 22.04.2014