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 Bookings
和 date(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 将 JQuery datepicker 中的值插入 MySQL 日期数据类型?