Как сравнить два времени в PHP
у меня было два раза в формате 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 как можно ближе. Что может вызвать это?
11 ответов
простой, но умный способ сделать это-удалить": "из ваших дат.
$resttimefrom = 73000;
$resttimeto = 223000;
$currentTime = (int) date('Gis');
if ($currentTime > $resttimefrom && $currentTime < $resttimeto )
{
$stat="open";
}
else
{
$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 = 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
просто преобразуйте даты в метку времени 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";
}
на date
функция возвращает строку, поэтому сравнение, которое вы делаете, будет сравнением строк-так что 7: 30 будет больше, чем 22:30
было бы гораздо лучше использовать mktime
, который вернет значение метки времени Unix (целое число), чтобы сделать для лучшего сравнения
$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
}
$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;
Как сказал полковник шрапнель, я делаю, Преобразуя все время в секунды, а затем сравниваю его с общими секундами текущего времени