如何在php中搜索2次之间的查询
Posted
技术标签:
【中文标题】如何在php中搜索2次之间的查询【英文标题】:How to search a query between 2 time in php 【发布时间】:2019-03-07 06:49:33 【问题描述】:我需要在一天内搜索 2 次之间的一行 例如
当前时间是13.30 点
第一次是13点
第二次是14点
如果当前时间在第一次和第二次之间,返回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
*/
我只需要当前时间在第一次和第二次之间的一行
【问题讨论】:
jquery 和 JS 无关 查询添加 sql 到标签 显示您目前的查询 请详细说明你问题的这一部分:“然后将第一次和第二次转换为strtotime,但是如果查询的结果是2行怎么办?”,现在还不是很清楚你做了什么,你期望看到什么,以及你看到了什么。 对不起,我编辑了一些我需要的细节 “但是如果查询的结果是 2 行怎么办?” - 当您必须多次执行任何任务时,与往常一样的“如何”:在循环. 【参考方案1】:像这样(如果你有一个日期时间字段):
$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'");
在这种情况下,我个人会将输入和输出设置为完整的日期时间字段,然后您可以使用上述日期函数,您可以删除一列,并处理桥接日期的输入和输出值。
【讨论】:
当然! - 很高兴我能帮上忙。【参考方案2】:您可以使用以下代码:
$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();
希望对你有帮助。
【讨论】:
【参考方案3】:这样试试
首先,将三个时间都转换成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();
【讨论】:
对不起,我没有清楚地解释我的问题,我已经编辑过了。数据库列中的第一次和第二次是时间格式,如 14:00 或 10:00,如果我将其更改为 strtotime(),我可以在查询中搜索吗? @Rif 是的,为什么不 我试过了,它不会给我我想要的一行,如果我只是强迫它只占一行,我怎么知道那一行是不是当前时间的一行? @Rif 你的意思是“我怎么知道那一行是一行”?以上是关于如何在php中搜索2次之间的查询的主要内容,如果未能解决你的问题,请参考以下文章