Yii2 GridView中如何将yyyy-mm-dd日期转换为mm-dd-yyyy格式
Yii2 GridView 中yyyy-mm-dd格式日期转mm-dd-yyyy展示实现方案
你不需要手动做复杂的时间戳解析,以下是可直接复用的实现方式,优先推荐第一种Yii2原生方案:
方案1:使用Yii2内置格式化组件(最简便,无需手动处理时间戳)
Yii2自带的Formatter类会自动解析常见日期字符串(包括你用的yyyy-mm-dd格式)为时间戳,不需要手动调用strtotime或者做字符串拆分,直接在GridView的列配置中设置即可:
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => [ // 其他列配置... [ 'attribute' => 'create_time', // 替换为你实际的日期字段名 'format' => ['date', 'php:m-d-Y'], // m-d-Y即对应mm-dd-yyyy输出格式 ], // 其他列配置... ], ]) ?>
注意:如果你的项目配置了全局
formatter默认日期格式,这个配置会优先使用当前列指定的格式,不会影响全局逻辑。
方案2:闭包手动处理(兼容特殊日期格式场景)
如果碰到内置组件无法自动解析的特殊日期格式,可以用PHP原生strtotime()函数把yyyy-mm-dd字符串转为时间戳,再调用date()格式化输出,记得加空值判断避免空值时错误输出当前日期:
[ 'attribute' => 'create_time', 'value' => function ($model) { // 空值直接返回空字符串,避免strtotime解析空值返回当前时间戳 if (empty($model->create_time)) { return ''; } return date('m-d-Y', strtotime($model->create_time)); }, ]
避坑提示
- 不要手动拆分yyyy-mm-dd的字符串做拼接,很容易出现月份、日期补零错误,或者跨时区计算偏差
- 如果你的日期字段存储的是带时分秒的
yyyy-mm-dd H:i:s格式,上面两种方案都可以正常兼容,不需要额外调整
内容的提问来源于stack exchange,提问作者Vasim Walikar
相关产品推荐
相关产品推荐

