CodeIgniter 3中如何从数组提取的datetime中拆分出日期?
在CodeIgniter 3中正确提取Datetime字段的日期部分
推荐方案:用PHP DateTime类处理(最稳定)
DateTime类能兼容绝大多数标准datetime格式,完全避免手动拆分的格式风险,代码示例:
// 从模型获取数据 $data['result'] = $this->MTransaksi->cekpengembalian(); // 遍历处理每条数据的tanggal_kembali字段 foreach ($data['result'] as &$item) { // 跳过空值避免报错 if (empty($item['tanggal_kembali'])) { $item['tanggal_kembali_date'] = ''; continue; } $dt = new DateTime($item['tanggal_kembali']); // 转为你需要的Y-m-d格式 $item['tanggal_kembali_date'] = $dt->format('Y-m-d'); }
如果你坚持用explode(仅限确定格式的场景)
如果你的tanggal_kembali是标准的Y-m-d H:i:s格式(MySQL默认datetime格式),可以按空格拆分,但必须做空值和数组索引判断:
foreach ($data['result'] as &$item) { $item['tanggal_kembali_date'] = ''; if (!empty($item['tanggal_kembali'])) { $parts = explode(' ', $item['tanggal_kembali']); // 确保拆分后有至少一个元素 if (isset($parts[0])) { $item['tanggal_kembali_date'] = $parts[0]; } } }
注意:如果datetime格式不是空格分隔(比如ISO格式的
Y-m-dTH:i:s),这种方法会直接失效,不推荐在不确定格式时使用。
更高效的方案:数据库层面直接提取日期
在模型的查询中直接用SQL函数提取日期,减少PHP端的处理成本,以MySQL为例:
// MTransaksi模型的cekpengembalian方法修改如下 public function cekpengembalian() { // 用DATE()函数直接提取日期字段,别名tanggal_kembali_date $this->db->select('*, DATE(tanggal_kembali) AS tanggal_kembali_date'); // 你的其他查询条件(比如where、join等) // $this->db->where(...); return $this->db->get('your_transaksi_table')->result_array(); }
这样获取到的$data['result']里直接包含tanggal_kembali_date字段,无需额外处理。
你之前显示异常的可能原因
tanggal_kembali字段存在空值,直接explode会导致$parts[0]为空或报错- 字段格式不是预期的空格分隔(比如存储格式有误)
- 没有对拆分后的数组做索引判断,导致Undefined offset错误
内容的提问来源于stack exchange,提问作者Sirious
相关产品推荐
相关产品推荐

