没有不值得去解决的问题,也没有不值得去学习的技术!

在 Yii2 中,将接口中的请求参数 2025-04-04 ,存入数据库中为 2025-04-04 23:59:59 的实现

1、接口中的请求参数


{
"expired_at": "2025-04-04"
}


2、最终在模型中的 rules 实现如下


[['expired_at'], 'datetime', 'format' => 'php:Y-m-d'],
[['expired_at'], 'filter', 'filter' => function ($value) {
return $value ? Yii::$app->formatter->asDatetime(
$value . ' 23:59:59',
'php:Y-m-d H:i:s'
) : null;
}],

$this->save(false)


3、但是,最后写入 MySQL 的值为 2025-04-05 07:59:59


INSERT INTO convention_participant_share_recipients (share_filter_id, real_name, view, download, expired_at, id, company_id, convention_id, create_user_id, user_id, status, created_at, updated_at) VALUES ('1827082629731098', '王00713', 1, 2, '2025-04-05 07:59:59', '1827082629731120', '1826937119386040', '1826937119386049', '1826937119386043', '1827082629731108', 1, '2025-04-07 14:42:27', '2025-04-07 14:42:27')


4、Yii::$app->formatter 是 展示用的工具,不是为了数据入库的格式化而设计的。决定直接拼接,最终实现如下


[['expired_at'], 'datetime', 'format' => 'php:Y-m-d'],
[['expired_at'], 'filter', 'filter' => function ($value) {
return $value . ' 23:59:59';
}],


5、不过后续有将数据库存储的 2025-04-04 23:59:59,显示为 2025-04-04 的需求。最终实现如下


'formatter' => [
'timeZone' => 'Asia/Shanghai',
'defaultTimeZone' => 'Asia/Shanghai',
'dateFormat' => 'yyyy-MM-dd',
'datetimeFormat' => 'yyyy-MM-dd HH:mm:ss',
'timeFormat' => 'HH:mm:ss',
],

$item['expired_at'] = Yii::$app->formatter->asDate($item['expired_at'], 'php:Y-m-d');


PHP / Laravel / Yii2 老项目维护与长期技术支持

如果你的 PHP / Laravel / Yii2 项目已经上线,但遇到原开发离职、Bug 长期无人修复、接口不稳定、性能下降、代码难以接手等问题,可以联系我做一次远程技术排查。

适合以下情况:
✅ 老旧 PHP 系统无人维护
✅ Laravel / Yii2 项目 Bug 修复
✅ 后台管理系统小功能迭代
✅ RESTful API 接口排查
✅ MySQL / Redis / Nginx 性能问题
✅ 长期远程兼职维护

可先从一次小问题开始:
✅ 线上报错排查
✅ 接口异常分析
✅ 慢查询与性能瓶颈定位
✅ 代码结构初步评估
✅ 部署环境与日志检查

如需咨询,请联系我,并注明:PHP 维护咨询

联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理