如何在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次之间的查询的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 中搜索两次之间的变量

在PHP中获取两次之间的时间差[重复]

两次之间的时间差(分钟)

如何在PHP中检查时间是不是在两次之间[重复]

如何查询两地间的距离?

SQL,在计算两次之间的差异时插入表