Узнайте, соответствует ли период времени текущему времени

У меня такая дата:

// just a example date $time_in_the_future_start = date('H:i', time()+60*60*24*7); $time_in_the_future_end = date('H:i', time()+60*60*24*7+480); $now = date('H:i', time()); 

Как я могу узнать, находится ли текущее время в пределах $time_in_the_future ?

Например, если

 $time_in_the_future_start = 21:30; $time_in_the_future_end = 0:30; 

а также

 $now = 22:07 

это будет матч.

edit: чтобы уточнить, $time_in_the_future – это повторяющееся событие с датой в прошлом или в будущем. Мне нужны только часы + минуты, чтобы соответствовать, а не остальная часть даты … В основном я просто хочу сравнить время в день

функция inTimeRange ()

Полагаю, это будет отлично работать в вашем случае.

  function inTimeRange($time_start, $time_end, $time_needle) { $res = false; $t1 = strtotime("1970-01-01 {$time_start}:00"); $t2 = strtotime("1970-01-01 {$time_end}:00"); $tn = strtotime("1970-01-01 {$time_needle}:00"); if ($t1 >= $t2) $t2 = strtotime('+1 day', $t2); return ($tn >= $t1) && ($tn <= $t2); // or return ($tn > $t1) && ($tn < $t2); } var_dump(inTimeRange('21:30', '00:30', '22:07')); 

Вывод

правда

Примечание. Все параметры должны быть в формате HH:MM . Вы можете передать date("H:i", ...) для параметров этой функции.

Вы можете просто использовать часть time() для получения числового значения в секундах, которое может использоваться программно.

 $time_in_the_future_start = time()+60*60*24*7; $time_in_the_future_end = time()+60*60*24*7+480; $now = time(); if($now >= $time_in_the_future_start && $time < $time_in_the_future_end) { // between times } 

а затем для печати значений с форматом hh: mm, вы все равно можете использовать date('H:i') только вы закончите проверку.

Вот пример, который сравнивает время в этот день. Обратите внимание, что это не будет сравнивать даты, точно так же, как вы просили.

Это преобразует время в часы того дня, чтобы мы могли сравнить его как одно число.

 $time_in_the_future_start = time()+60*60*24*7; $time_in_the_future_start = date('H', $time_in_the_future_start) + (date('i', $time_in_the_future_start) / 60); $time_in_the_future_start = time()+60*60*24*7+480; $time_in_the_future_start = date('H', $time_in_the_future_start) + (date('i', $time_in_the_future_start) / 60); $now = time(); $now = date('H', $now) + (date('i', $now) / 60); if($now > $time_in_future_start && $now < $time_in_future_end){ //withing time span }else{ //Not within time span } 

Если у вас есть дата, используйте strtotime() в оба раза, чтобы получить отметку времени unix для каждого. Затем проверьте, является ли временная метка unix того времени, которое вы хотите получить, больше, чем время _start и меньше времени _end.

Если они все уже в форме метки, это еще проще. Поскольку кажется, что вы начинаете со time() , делайте что-то вроде

 $start = time(); $time_in_the_future_start = $start + 60*60*24*7; $time_in_the_future_end = $start + 60*60*24*7+480; $time_in_the_future_start_display = date('H:i', $start+60*60*24*7); $time_in_the_future_end_display = date('H:i', $start+60*60*24*7+480); 

то просто сделайте

 $curtime = time(); if($curtime < $time_in_the_future_end && $curtime > $time_in_the_future_start) // Code here