У меня такая дата:
// 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
– это повторяющееся событие с датой в прошлом или в будущем. Мне нужны только часы + минуты, чтобы соответствовать, а не остальная часть даты … В основном я просто хочу сравнить время в день
Полагаю, это будет отлично работать в вашем случае.
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