优化了UCore GridHelper中的创建时间/修改时间展示,统一使用"年-月-日 时:分:秒"格式,并新增了组合时间列功能。
// 优化前
public function columnCreatedAt()
{
return $this->grid->column('created_at', '创建时间')->sortable();
}
// 优化后
public function columnCreatedAt($field = 'created_at', $label = '创建时间')
{
return $this->columnDateTime($field, $label);
}
// 优化前
public function columnUpdatedAt()
{
return $this->grid->column('updated_at', '更新时间')->sortable();
}
// 优化后
public function columnUpdatedAt($field = 'updated_at', $label = '更新时间')
{
return $this->columnDateTime($field, $label);
}
public function columnTimes($createdAtField = 'created_at', $updatedAtField = 'updated_at', $label = '时间信息')
{
return $this->grid->column($createdAtField, $label)->display(function ($createdAt) use ($updatedAtField) {
$updatedAt = $this->{$updatedAtField} ?? '';
// 格式化创建时间
$createdAtFormatted = $this->formatDateTime($createdAt);
$createdAtHtml = "<div><small class='text-muted'>创建:</small> {$createdAtFormatted}</div>";
// 格式化更新时间
$updatedAtHtml = '';
if ($updatedAt) {
$updatedAtFormatted = $this->formatDateTime($updatedAt);
$updatedAtHtml = "<div><small class='text-muted'>更新:</small> {$updatedAtFormatted}</div>";
}
return $createdAtHtml . $updatedAtHtml;
})->sortable();
}
private function formatDateTime($value)
{
// 检查空值(但不包括0,因为0是有效的时间戳)
if (is_null($value) || $value === '') {
return '-';
}
// 如果是时间戳,转换为日期时间字符串
if (is_numeric($value)) {
return date('Y-m-d H:i:s', $value);
}
// 如果是Carbon实例或DateTime对象
if ($value instanceof \Carbon\Carbon || $value instanceof \DateTime) {
return $value->format('Y-m-d H:i:s');
}
// 如果是字符串,尝试转换为标准格式
if (is_string($value)) {
try {
$date = new \DateTime($value);
return $date->format('Y-m-d H:i:s');
} catch (\Exception $e) {
return $value; // 如果转换失败,返回原值
}
}
return $value;
}
<?php
namespace App\Module\Example\AdminControllers;
use UCore\DcatAdmin\AdminController;
class ExampleController extends AdminController
{
protected function grid()
{
$grid = $this->gridMake();
$helper = $this->gridHelper($grid);
// 现有代码无需修改,自动使用新的格式化
$helper->columnCreatedAt(); // 自动格式化为 Y-m-d H:i:s
$helper->columnUpdatedAt(); // 自动格式化为 Y-m-d H:i:s
return $grid;
}
}
protected function grid()
{
$grid = $this->gridMake();
$helper = $this->gridHelper($grid);
// 使用自定义字段名和标签
$helper->columnCreatedAt('register_time', '注册时间');
$helper->columnUpdatedAt('last_login_time', '最后登录');
return $grid;
}
protected function grid()
{
$grid = $this->gridMake();
$helper = $this->gridHelper($grid);
// 基本ID列
$helper->columnId();
// 业务字段
$grid->column('username', '用户名');
$grid->column('email', '邮箱');
// 使用组合时间列,节省空间
$helper->columnTimes(); // 默认使用 created_at 和 updated_at
// 或者自定义字段
$helper->columnTimes('start_time', 'end_time', '活动时间');
return $grid;
}
protected function grid()
{
$grid = $this->gridMake();
$helper = $this->gridHelper($grid);
$helper->columnId();
$grid->column('title', '标题');
// 重要的时间字段单独显示
$helper->columnCreatedAt();
// 其他时间字段组合显示
$helper->columnTimes('published_at', 'expired_at', '发布时间');
return $grid;
}
创建时间: 2023-12-25 14:30:45
更新时间: 2023-12-26 09:15:30
时间信息:
创建: 2023-12-25 14:30:45
更新: 2023-12-26 09:15:30
Y-m-d H:i:s 格式-项目中包含了完整的单元测试,验证了优化后方法的正确性:
vendor/bin/phpunit tests/Unit/UCore/GridHelperDateTimeTest.php
# OK (2 tests, 13 assertions)
现有使用 columnCreatedAt() 和 columnUpdatedAt() 的代码会自动使用新的格式化,无需修改。
对于字段较多的列表页面,建议使用 columnTimes() 组合显示来节省空间:
// 推荐:使用组合时间列
$helper->columnTimes();
// 而不是:
$helper->columnCreatedAt();
$helper->columnUpdatedAt();