У меня было два раза в формате, например, 7:30:00 и 22:30:00, хранящиеся в переменных $resttimefrom
и $resttimeto
соответственно.
Я хочу проверить, находится ли текущее время между этими двумя значениями. Я проверяю это с помощью кода
$time = date("G:i:s"); if ($time > $resttimefrom and $time < $resttimeto ){ $stat = "open"; } else { $stat = "close"; }
Но я всегда получаю $ stat как Close. Что может быть причиной этого?
вы можете попробовать использовать strtotime
$st_time = strtotime($resttimefrom); $end_time = strtotime($resttimeto); $cur_time = strtotime(now);
затем проверьте
if($st_time < $cur_time && $end_time > $cur_time) { echo "WE ARE CLOSE NOW !!"; } else{ echo "WE ARE OPEN NOW !!"; }
Надеюсь, это поможет вам.
Простой, но умный способ сделать это – удалить «:» из ваших дат.
$resttimefrom = 73000; $resttimeto = 223000; $currentTime = (int) date('Gis'); if ($currentTime > $resttimefrom && $currentTime < $resttimeto ) { $stat="open"; } else { $stat="close"; }
Попробуйте переформатировать их в нечто такое, что вы можете сравнить. Например, цифры:
$resttimefrom = mktime(7,30,0); $resttimeto = mktime(22,30,0); $time = mktime(date('H'),date('i'),date('s'));
Вы сравниваете строки.
Преобразуйте временные строки в метки времени с помощью strtotime()
.
Затем сравните с time()
.
$today = date("mdy "); $now = date("mdy G:i:s"); if (strtotime($today . $resttimefrom) < $now && $now > strtotime($today . $resttimeto)) { $stat = 'open'; else $stat = 'close
Функция date
возвращает строку, поэтому сравнение, которое вы делаете, будет строковым сравнением – поэтому 7:30 будет больше 22:30
Было бы намного лучше использовать mktime
, которое вернет значение временной отметки Unix (integer), чтобы было лучшее сравнение
$currentTime = mktime(); $resttimefrom = mktime(hour,min,second);
Уловкой манипулирования и сравнения дат и времени в PHP является сохранение значений даты и времени в целочисленной переменной и использование функций mktime (), date () и strtotime (). Целочисленное представление даты / времени – это количество секунд с полуночи, 1970-янв-1, которое называется «эпохой». Когда ваша дата / время будет в целочисленной форме, вы сможете эффективно сравнить ее с другими датами, которые также находятся в целочисленной форме.
Конечно, поскольку вы, скорее всего, будете получать значения даты / времени из запросов страниц и запросов выбора базы данных, вам нужно будет преобразовать вашу строку даты / времени в целое число, прежде чем вы сможете выполнить какое-либо сравнение или арифметику.
Предполагая, что вы уверены, что переменные $ resttimefrom и $ resttimeto содержат правильно отформатированное время, вы можете использовать функцию strtotime () для преобразования времени строки в целое число. strtotime () принимает строку, которая отформатирована как дата и преобразует ее в число секунд с эпохи.
$time_from = strtotime($resttimefrom); $time_to = strtotime($resttimeto);
Боковое примечание: strtotime () всегда возвращает полную дату в целочисленной форме. Если в вашей строке нет даты, только время, strtotime () возвращает сегодняшнюю дату вместе со временем, которое вы указали в строке. Это не важно для вас, потому что две даты, возвращаемые strtotime (), будут иметь одну и ту же дату, и сравнение двух переменных будет иметь желаемый эффект от сравнения двух раз по мере того, как даты отменяют друг друга.
Когда вы сравниваете два целых числа, имейте в виду, что чем раньше дата / время, тем меньше будет его целочисленное значение. Поэтому, если вы хотите увидеть, превышает ли $ time_from значение $ time_to, у вас будет следующее:
if ($time_from < $time_to) { // $time_from is ealier than $time_to }
Теперь, чтобы сравнить дату / время с текущей системной датой / временем, просто используйте mktime () без параметров для представления текущей даты / времени:
if ($time_from < mktime()) { // $time_from is in the past }
Просто конвертируйте свои даты в отметку времени Unix, сравните их, у вас есть свои результаты! Это может выглядеть примерно так:
$time =date("G:i:s"); $time1 = strtotime($time); $resttimefrom1 = strtotime($resttimefrom ); $resttimeto1 = strtotime($resttimeto ); if ($time1 >$resttimefrom and $time1 <$resttimeto) { $stat="open"; } else { $stat="close"; }
$firstTime = '1:07'; $secondTime = '3:01'; list($firstMinutes, $firstSeconds) = explode(':', $firstTime); list($secondMinutes, $secondSeconds) = explode(':', $secondTime); $firstSeconds += ($firstMinutes * 60); $secondSeconds += ($secondMinutes * 60); $difference = $secondSeconds - $firstSeconds;
$Time1 = date_parse($time); $seconds1 = $Time1['hour'] * 3600 + $Time1['minute'] * 60 + $Time1['second']; $Time2 = date_parse($current_time); $seconds2 = Time2['hour'] * 3600 + Time2['minute'] * 60 + Time2['second']; $actula_time = $seconds1 - $seconds2; echo floor($actula_time / 3600) .":". floor(($actula_time / 60)%60) .":". $actula_time%60;
Поскольку Col. Shrapnel Said я делаю, преобразовывая все время в секунды, а затем сравнивая его с суммарными секундами текущего времени