У меня было два раза в формате, подобном 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. Чем это может быть вызвано?
Как сказал полковник Шрапнель, я делаю, преобразуя все время в секунды, а затем сравниваю его с общим количеством секунд текущего времени
Простой, но разумный способ сделать это - удалить ":" из дат.
$resttimefrom = 73000;
$resttimeto = 223000;
$currentTime = (int) date('Gis');
if ($currentTime > $resttimefrom && $currentTime < $resttimeto )
{
$stat="open";
}
else
{
$stat="close";
}
$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
Попробуйте переформатировать их во что-то, что можно было бы вот так сравнить. Например, числа:
$resttimefrom = mktime(7,30,0);
$resttimeto = mktime(22,30,0);
$time = mktime(date('H'),date('i'),date('s'));
Вы сравниваете строки.
Преобразуйте строки времени в отметки времени с помощью strtotime ()
.
Затем сравните с time ()
.
Функция 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";
}
$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;
Уловка для управления и сравнения дат и времени в PHP заключается в том, чтобы сохранять значения даты / времени в целочисленной переменной и использовать функции mktime (), date () и strtotime (). Целочисленное отображение даты / времени - это количество секунд, прошедших с полуночи 1 января 1970 года, которая называется «эпохой». Как только ваша дата / время будет в целочисленной форме, вы сможете эффективно сравнивать ее с другими датами, которые также находятся в целочисленной форме.
Конечно, поскольку вы, скорее всего, будете получать значения даты / времени из запросов страниц и запросов выбора базы данных, вам необходимо преобразовать строку даты / времени в целое число, прежде чем вы сможете выполнять какое-либо сравнение или арифметические операции.
Предполагая, что вы уверены, что переменные $ 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
}