2014-12-05 2 views
2

Я пытаюсь вычислить небольшую рутину для своего форума (vBulletin 3.x, который поддерживает PHP-процедуры через систему крючков). У меня есть этот код из некоторых исследований, которые я делал раньше, но условное не работает, как я предполагал, - это будет только «истина», если время начала установлено равным 0000 или более позднему.Предотвращение регистрации между определенными часами

$regtime = gmdate('Hi'); 
$pnr_b1 = "2300"; 
$pnr_b2 = "0600"; 

if ($regtime > $pnr_b1 && $regtime < $pnr_b2) { 
// prevent registration code 
} 

Может ли кто-нибудь помочь? Для справки Я запускаю PHP-версию 5.3.29 в случае, если это влияет на ваши предложения.

+1

Пожалуйста, дайте больше деталей, то»... это Безразлично» т работы ". – Carcigenicate

+0

Вы сравниваете строки, а не времена, и нет строки больше, чем '2300', что также меньше, чем' 0600' –

+0

@HoboSapiens Спасибо, я предполагал, что это была проблема, но не может решить, как еще сделай это. Пробовали какое-то время с несколькими предложениями, которые я нашел, но не повезло - отсюда просьба о помощи :) – SomeGuy

ответ

4

Вместо сравнения строк, вы можете также использовать DateTime объекты так, чтобы можно было легко сравнить время:

$regtime = new DateTime('23:15'); 
$from_time = new DateTime('23:00'); 
$to_time = new DateTime('23:30'); 

if($regtime >= $from_time && $regtime <= $to_time) { 
    echo 'okay, process this'; 
} else { 
    echo 'not allowed'; 
} 
+0

Спасибо, но это не сработало. Я пробовал этот тест: $ pnr_b1 до 23:00 и pnr_b2 до 23:15. Затем я попытался зарегистрироваться в 23:30 (текущее местное время здесь), и оно все равно заблокировало меня. почему @Ghost – SomeGuy

+0

@SomeGuy да логика неправильна, ее предполагалось быть проверкой включения, я пересмотрел его снова проверить – Ghost

+0

Отлично, спасибо за разъяснение. – SomeGuy

0

это работает:

<?php 
$regtime = gmdate('Gi'); 
$pnr_b1 = 2300; 
$pnr_b2 = 600; 
if ($regtime > $pnr_b1 or $regtime < $pnr_b2) { 
    echo "fail"; 
} 
+0

Вы не должны использовать '0600', так как это восьмеричная нотация и представляет собой совершенно другое значение, чем' 600'. Я не уверен, что это может привести к ошибке, но просто не делайте этого. – deceze

+0

, так что вы предлагаете всего 600? – bart2puck

+0

Из интереса, какое значение gmdate вернется на 6 утра? Кроме того, есть ли здесь решение вместо «или»? Я не уверен, что это все? – SomeGuy

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