Узнайте, соответствует ли период времени текущему времени - PullRequest
2 голосов
/ 22 апреля 2011

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

 // 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

это будет совпадение.

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

Ответы [ 4 ]

5 голосов
/ 23 апреля 2011

функция 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", ...) для параметров этой функции.

3 голосов
/ 23 апреля 2011

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

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

$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
}
3 голосов
/ 23 апреля 2011

Вы можете просто использовать часть 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
}

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

2 голосов
/ 23 апреля 2011

Если у вас есть дата, используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...