Как искать запрос между 2 раза в php - PullRequest
0 голосов
/ 07 марта 2019

Мне нужно искать строку между 2 раза в день например

текущее время 13.30.

Первый раз 13.00.

Второй раз 14.00.

Если текущее время находится между первым и вторым временем, вернуть true, иначе вернуть false

я делаю такой код:

$today = date("Y-m-d");

$this->db->query("select date, in, out from absent where date='$today' and id_user='120'")->result(); /* the result is 3 rows 2019-3-7, 13:00, 14:00 2019-3-7, 09.00, 12.00 2019-3-7, 15:00, 17:00 */

Мне просто нужна одна строка, текущее время между первым и вторым временем

Ответы [ 3 ]

0 голосов
/ 07 марта 2019

Вы можете использовать следующий код:

$this->db->select('date, in, out');
$this->db->from('absent');
$this->db->where('date', $today);
$this->db->where('user_id', '120');
$this->db->where('in >='. $currentTime);
$this->db->where('out <='. $currentTime);
return $this->db->get()->result_array();

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

0 голосов
/ 07 марта 2019

Как это (если у вас есть одно поле даты и времени):

$firstTime = (new DateTime)->format('H:i:s');
$secondTime = (new DateTime)->modify('+1 hours +2 minutes +3 seconds')->format('H:i:s');


$this->db->query("SELECT `date`, in, out FROM absent WHERE TIME(`date`) >= '$firstTime' AND TIME(`date`) <= '$secondTime' AND id_user='120'");

Дата - это зарезервированное слово в MySQL, поэтому вы должны избегать его. Вы можете сделать это для любой части поля даты и времени: MONTH(), DAY(), YEAR(), TIME(), HOUR() и т. Д.

Тогда вы просто сопоставляете свой формат даты, в данном случае только время H:i:s и немного логики.

Непонятно, но вам может понадобиться что-то подобное, так как похоже, что у вас есть поле даты и два поля с часами и минутами?

$today = new DateTime;

$date = $today->format('Y-m-d');
$in = $today->format('H:i');
$out = $today->modify('+2 hours')->format('H:i');


$this->db->query("SELECT `date`, in, out FROM absent WHERE `date` = '$date' AND in >= '$in' AND out <= '$out' AND id_user='120'");

Лично в этом случае я бы сделал полными поля даты и времени входными и исходящими, затем вы можете использовать функции даты, как указано выше, и вы можете исключить один столбец и обрабатывать входящие и исходящие значения, которые соединяют дату.

0 голосов
/ 07 марта 2019

Попробуйте вот так

Сначала преобразуйте все три раза в strtotime()

Во-вторых, result() всегда даст вам более одной строки, если он будет извлечен. Используйте row(), чтобы получить только одну запись

$current = strtotime('time-one');
$first_time = strtotime('time-two');
$second_time = strtotime('time-three');
$date = date('Y-m-d');    

Запрос

$this->db->select('*');
$this->db->from('table');
$this->db->where('date', $date);
$this->db->where('user_id', '120');
$this->db->where('time >='. $first_time);
$this->db->where('time <='. $second_time);
return $this->db->get()->row();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...