Codeigniter 和 MYSQL 日期时间

Posted

技术标签:

【中文标题】Codeigniter 和 MYSQL 日期时间【英文标题】:Codeigniter And MYSQL DateTime 【发布时间】:2012-04-28 20:31:37 【问题描述】:

我有一个查询如下:

$query = $this->db->get_where('Bookings', array('Status' => 0, 'Driver_ID' => null, 'Date'=> 'NOW()'));

日期字段是日期时间类型,我想在日期与今天相同的地方乱码记录,但是上述内容以及我厌倦的所有其他内容都不起作用。

谁能告诉我如何正确提取今天日期的记录,忽略日期时间的时间部分。

感谢您的帮助

更新

我现在已将查询转换为以下内容

$start = date('Y-m-d 00:00:00');
    $end = date('Y-m-d 23:59:59');
    $query = $this->db->get_where('Bookings', array('Status' => 0, 'Driver_ID' => null, 'Date' => 'BETWEEN '.$start.' AND '.$end));

然而还是没有运气,只是重新调整没有结果!

【问题讨论】:

【参考方案1】:

mysql 标准日期时间格式为date("Y-m-d H:i:s")

因此,您的查询需要获取当天的所有内容,因此需要使用 where 子句;

SELECT * FROM `Bookings` WHERE `Date` BETWEEN date("Y-m-d 00:00:00") AND date("Y-m-d 23:59:59")

【讨论】:

您好,感谢您的回复,但到目前为止都没有奏效,试图摆弄答案,但到目前为止什么也没显示:( TBH 我会做类似@Logan Serman 建议的事情。我会将所有日期存储为 UNIX 时间戳。因为它们只是整数,所以使用这些值很容易。【参考方案2】:

在您的代码中,您说您希望 DateTime 字段为NOW()。问题是NOW() 给出了一个 DateTime 值,即“YYYY-MM-DD”形式的日期,后跟“HH:MM:SS”形式的时间。

您的查询是在说“给我记录今天的日期,在这一刻”。你想要的是“给我记录今天的日期”。

这就是为什么在数据库中使用 DateTime 字段通常很麻烦。您必须使用 MySQL 函数 DATE() 将 Date 字段转换为日期,而不是时间,而不是返回 DateTime 值的 NOW(),您将希望使用仅返回日期值。我没有专门使用 CodeIgniter 的经验,但请尝试:

$query = $this->db->get_where('Bookings', array('Status' => 0, 'Driver_ID' => null, 'DATE(Date)'=> 'CURDATE()'));

(我不知道你是否可以将MySQL函数应用于$this->db->get_where的字段)。

【讨论】:

您好,感谢您的回复,但到目前为止都没有奏效,试图摆弄答案,但到目前为止什么也没显示:( 有没有办法查看get_where 函数正在生成什么SQL?如果您只是运行查询SELECT * FROM Bookings WHERE Status = 0 AND Driver_ID = NULL and DATE(`Date`) = CURDATE() 会怎样?也许查询失败是因为你有一个名为“Date”的字段,而那是 MySQL 中的一个关键字(因为 DATE() 函数)? 将名称从 Date 更新为 Booking_Date 没有运气,还尝试了您建议的手动 SQL 语句,但没有运气。以下是我存储的日期之一 2012-04-17 13:45:24 你能告诉我你要买什么吗:SELECT CURDATE()SELECT DATE(Booking_Date) FROM Bookingsdate(Y-m-d) 要明确date('Y-m-d')php函数,不是MySQL(也忘了参数两边的引号,来不及编辑)。【参考方案3】:
$params = array('Status' => 0, 'Booking_Date'=> date('Y-m-d'));
$this->db->query('SELECT * FROM Bookings WHERE Status=? AND Driver_ID Is Null AND    Date(Booking_Date) = ?',$params);

认为这会奏效

【讨论】:

您能否更新查询以使用 Booking_Date 来引用我的列,我对列名和函数调用感到困惑 啊,终于搞定了,非常感谢!【参考方案4】:

我会试试的

$this->db->where('Status', 0);
$this->db->where('Driver_ID', null);
$this->db->where('DATE(Date)', date('Y-m-d'), FALSE);
$query = $this->db->get('Bookings');

【讨论】:

已确认,这确实有效,但是必须删除 FALSE 并且需要在(日期)周围添加 qoutes,就像这样 $this->db->where('Status', 0); $this->db->where('Driver_ID', null); $this->db->where('DATE(Booking_Date)', date('Y-m-d')); $query = $this->db->get('Bookings'); 我认为这是一个更好的答案,那么在这种情况下,它更接近您最初尝试使用的功能

以上是关于Codeigniter 和 MYSQL 日期时间的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter MySQL 不正确的日期时间插入

Codeigniter模型中的Mysql日期格式

在 CodeIgniter 中按日期过滤 MySQL 条目

如何使用 Codeigniter 将 JQuery datepicker 中的值插入 MySQL 日期数据类型?

如何在php/codeigniter或mysql中获得两个相差20分钟的日期的所有组合

在 csv_from_result 方法中将 mysql 时间戳转换为我们在 codeigniter 查询对象中的日期