Как сравнить два раза в PHP - PullRequest
16 голосов
/ 04 августа 2010

У меня было два раза в формате, таком как 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. Что может вызвать это?

Ответы [ 11 ]

22 голосов
/ 20 марта 2012

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

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

22 голосов
/ 04 августа 2010

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

$resttimefrom = 73000;
$resttimeto = 223000;

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

if ($currentTime > $resttimefrom && $currentTime < $resttimeto )
{
    $stat="open";
}
else
{
    $stat="close";
} 
4 голосов
/ 04 августа 2010

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

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

$time = mktime(date('H'),date('i'),date('s'));
3 голосов
/ 04 августа 2010

Просто преобразуйте свои даты в метку времени 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 голосов
/ 04 августа 2010
$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 голосов
/ 04 августа 2010

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

2 голосов
/ 04 августа 2010

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

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

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

http://php.net/mktime

1 голос
/ 04 августа 2010

Хитрость в манипулировании и сравнении даты и времени в 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
}
0 голосов
/ 09 января 2016
$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;
0 голосов
/ 04 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...