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

Ответы

Ответ 1

Как Col. Shrapnel Said, я делаю, преобразовывая все время в секунды, а затем сравнивая его с текущим временем в целом секундам

Ответ 2

вы можете попробовать использовать 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 !!";
}

Надеюсь, это может помочь вам.

Ответ 3

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

$resttimefrom = 73000;
$resttimeto = 223000;

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

if ($currentTime > $resttimefrom && $currentTime < $resttimeto )
{
    $stat="open";
}
else
{
    $stat="close";
} 

Ответ 4

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

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

$time = mktime(date('H'),date('i'),date('s'));

Ответ 5

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

Ответ 6

$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

Ответ 7

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

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

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

http://php.net/mktime

Ответ 8

Просто конвертируйте свои даты в отметку времени 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";
} 

Ответ 9

Уловкой манипулирования и сравнения дат и времени в 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
}

Ответ 10

$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;

Ответ 11

$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;