Как сравнить два раза в 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 как Close. Чем это может быть вызвано?

16
задан Mattias 29 February 2012 в 22:13
поделиться

9 ответов

Как сказал полковник Шрапнель, я делаю, преобразуя все время в секунды, а затем сравниваю его с общим количеством секунд текущего времени

-5
ответ дан 30 November 2019 в 15:28
поделиться

Простой, но разумный способ сделать это - удалить ":" из дат.

$resttimefrom = 73000;
$resttimeto = 223000;

$currentTime = (int) date('Gis');

if ($currentTime > $resttimefrom && $currentTime < $resttimeto )
{
    $stat="open";
}
else
{
    $stat="close";
} 
22
ответ дан 30 November 2019 в 15:28
поделиться
$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
3
ответ дан 30 November 2019 в 15:28
поделиться

Попробуйте переформатировать их во что-то, что можно было бы вот так сравнить. Например, числа:

$resttimefrom = mktime(7,30,0);
$resttimeto = mktime(22,30,0);

$time = mktime(date('H'),date('i'),date('s'));
4
ответ дан 30 November 2019 в 15:28
поделиться

Вы сравниваете строки.
Преобразуйте строки времени в отметки времени с помощью strtotime () .
Затем сравните с time () .

3
ответ дан 30 November 2019 в 15:28
поделиться

Функция date возвращает строку, поэтому сравнение, которое вы проводите, будет сравнением строк - так что 7:30 будет больше, чем 22:30

Было бы гораздо лучше использовать mktime , который вернет значение метки времени Unix (целое число), чтобы было лучше сравнение

$currentTime = mktime();
$resttimefrom = mktime(hour,min,second);

http://php.net/mktime

2
ответ дан 30 November 2019 в 15:28
поделиться

Просто преобразуйте свои даты в метку времени 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";
} 
3
ответ дан 30 November 2019 в 15:28
поделиться
$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;
0
ответ дан 30 November 2019 в 15:28
поделиться

Уловка для управления и сравнения дат и времени в 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
}
1
ответ дан 30 November 2019 в 15:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: