2013-07-13 4 views
-2

Я хочу сделать код, который ограничивает пользователей от имени пользователя после работы: Пользователи должны войти только с 8:00 до 4:35: Ниже приведен код, который я пробовал, и мне удалось создать два условия, но третий Состояние не работает: любая помощь будет очень ценна:Как я могу разрешить пользователям регистрироваться только в рабочее время?

<?php 
    # function to get right time of the targeted city 
    date_default_timezone_set('Africa/Johannesburg'); 
    function time_diff_conv($start, $s) 
    { 
     $string=""; 
     $t = array(//suffixes 
      'd' => 86400, 
      'h' => 3600, 
      'm' => 60, 
     ); 
     $s = abs($s - $start); 
     foreach($t as $key => &$val) { 
      $$key = floor($s/$val); 
      $s -= ($$key*$val); 
      $string .= ($$key==0) ? '' : $$key . "$key "; 
     } 
     return $string . $s. 's'; 
    } 
$date = date('h:i'); 
echo $date; 
/*Start time for work*/ 
$workStart = strtotime("08:00");//am 
    /*Stop time for work*/ 
$workStop = strtotime("04:35");//pm 
/*This is the current time*/ 
$currentTime = strtotime($date); 
//$fromSatrtToEnd = $workStart->diff($workStop); 
/*This Condition works*/ 
if($currentTime >=$workStart){ 
echo "Start Working"; 
/*This Condition also works*/ 
} else if($currentTime < $workStart){ 
echo "You too early at work"; 
} 
/*This Condition does not works*/ 
else if($currentTime < $workStop){ 
echo "Its after work"; 
} 

?> 

ответ

0

Вы должны указать период своей даты, программа не может распознать, что 08:00 это дата AM, а 04:35 - дата PM.

просто изменить объявление переменной в

/*Start time for work*/ 
$workStart = strtotime("08:00 AM");//am 
    /*Stop time for work*/ 
$workStop = strtotime("04:35 PM");//pm 

или преобразовать вторую переменную в формате 24-х:

$ workStop = StrToTime ("16:35 PM"); // вечера

Этот способ $workStart будет правильно оценен как незначительное значение по сравнению с $workStop.

затем измените, если правильно соответствовать условию:

if($currentTime >=$workStart && $current <= $workstop){ 
    echo "Start Working"; 
} else if($currentTime < $workStart){ 
    echo "You too early at work"; 
} 
else if($currentTime > $workStop){ 
    echo "Its after work"; 
} 
+0

Хотел бы я подправить вас: я отлично поработал, теперь мой код работает, теперь это исправление интегрировать с поясничным кодом –

1
if($currentTime >=$workStart AND $currentTime <= $workStop){ 
    echo "Start Working"; 
    /*This Condition also works*/ 
} else if($currentTime < $workStart){ 
    echo "You too early at work"; 
} 
/*This Condition does not works*/ 
else if($currentTime < $workStop){ 
    echo "Its after work"; 
} 

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

+0

когда я помещаю этот AND $ currentTime <= $ workStop, оператор if ничего не отображает, и если я удалю его, да: –

0

Во-первых, если вы должны управлять AM/PM часов, вы должны конвертировать ваши часы в 24-часовом формате в каждой строке вы используете их:

$date = date('H:i'); // H rather than h 
$workStart = strtotime("08:00"); 
$workStop = strtotime("16:35"); 

и ваши условия не правильно, вы должны иметь что-то вроде:

if($currentTime >=$workStart AND $current <= $workstop){ // need to check both 
    echo "Start Working"; 
} else if($currentTime < $workStart){ 
    echo "You too early at work"; 
} 
else if($currentTime > $workStop){ // > rather than < 
    echo "Its after work"; 
} 
+0

Отличная работа благодаря большому объему. Я объединил идею Kawashita86 с вашим кодом, тогда она работала. Я действительно оценил –

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