Ответ 1
Как Col. Shrapnel Said, я делаю, преобразовывая все время в секунды, а затем сравнивая его с текущим временем в целом секундам
У меня было два раза в формате 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. Что может вызвать это?
Как Col. Shrapnel Said, я делаю, преобразовывая все время в секунды, а затем сравнивая его с текущим временем в целом секундам
вы можете попробовать использовать 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("m-d-y ");
$now = date("m-d-y G:i:s");
if (strtotime($today . $resttimefrom) < $now && $now > strtotime($today . $resttimeto)) {
$stat = 'open';
else
$stat = 'close
Функция date
возвращает строку, поэтому сравнение, которое вы делаете, будет строковым сравнением - так что 7:30 будет больше 22:30
Было бы гораздо лучше использовать mktime
, который вернет значение временной отметки Unix (целое число), чтобы было лучшее сравнение
$currentTime = mktime();
$resttimefrom = mktime(hour,min,second);
Просто конвертируйте свои даты в отметку времени 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";
}
Уловкой манипулирования и сравнения дат и времени в 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
}
$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;