如何让CodeIgniter模型返回MSSQL数据库原始日期格式?
解决CodeIgniter查询MSSQL Date字段返回格式不一致的问题
我之前也碰到过类似的MSSQL+CodeIgniter日期格式坑,给你几个实用的解决办法,帮你拿到数据库原始的YYYY-MM-DD格式:
方案1:SQL查询层面直接指定格式(最推荐)
不用改框架,直接在TSQL里用CONVERT函数把Date字段转成你要的字符串格式,这样CI返回的结果就是原始的日期格式:
SELECT CONVERT(VARCHAR(10), your_date_column, 23) AS your_date_column FROM your_table;
这里的23是MSSQL专属的格式代码,刚好对应YYYY-MM-DD,完全匹配你想要的结果。
方案2:调整CodeIgniter的数据库驱动配置
如果不想每个查询都写转换逻辑,可以修改CI的MSSQL驱动文件(注意:升级框架前记得备份,或者自定义驱动避免被覆盖):
- 如果你用的是
sqlsrv驱动,找到system/database/drivers/sqlsrv/sqlsrv_result.php - 找到处理日期类型字段的代码段,把自动转成
May 18, 2018 12:00:00 AM这类格式的逻辑去掉,改成直接返回数据库的原始字符串格式。
方案3:模型里手动处理返回结果
要是不想动框架核心文件,也可以在模型查询完结果后,手动遍历转换:
$query = $this->db->get('your_table'); $results = $query->result(); foreach ($results as $row) { // 处理DateTime对象转成指定格式 if ($row->your_date_column instanceof DateTime) { $row->your_date_column = $row->your_date_column->format('Y-m-d'); } else { // 对已格式化的字符串直接截取前10位 $row->your_date_column = substr($row->your_date_column, 0, 10); } } return $results;
个人优先推荐方案1,它既不用修改框架核心,性能也更优,数据库直接返回你需要的格式,后续你想自己再做其他格式化也灵活。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

